finishm 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/Gemfile +31 -0
- data/LICENSE.txt +20 -0
- data/README.md +59 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/bin/assembly_visualiser +106 -0
- data/bin/check_primer_combinations.rb +73 -0
- data/bin/contig_joiner.rb +244 -0
- data/bin/contigs_against_assembly.rb +153 -0
- data/bin/finishm +143 -0
- data/bin/finishm_assembler +55 -0
- data/bin/finishm_gap_closer.rb +241 -0
- data/bin/kmer_abundance_file_tool.rb +49 -0
- data/bin/kmer_pattern_to_assembly.rb +377 -0
- data/bin/kmer_profile_finder.rb +92 -0
- data/bin/kmers_count_parse.d +52 -0
- data/bin/kmers_count_tabulate.d +123 -0
- data/bin/kmers_count_tabulate.rb +84 -0
- data/bin/pcr_result_parser.rb +108 -0
- data/bin/primer_finder.rb +119 -0
- data/bin/read_selection_by_kmer.d +174 -0
- data/bin/scaffold_by_pattern.rb +119 -0
- data/bin/scaffold_connection_possibilities_to_knowns.rb +193 -0
- data/bin/scaffold_end_coverages.rb +69 -0
- data/bin/trail_validator.rb +84 -0
- data/ext/mkrf_conf.rb +56 -0
- data/ext/src/Makefile +140 -0
- data/ext/src/src/allocArray.c +305 -0
- data/ext/src/src/allocArray.h +86 -0
- data/ext/src/src/autoOpen.c +107 -0
- data/ext/src/src/autoOpen.h +18 -0
- data/ext/src/src/binarySequences.c +813 -0
- data/ext/src/src/binarySequences.h +125 -0
- data/ext/src/src/concatenatedGraph.c +233 -0
- data/ext/src/src/concatenatedGraph.h +30 -0
- data/ext/src/src/concatenatedPreGraph.c +262 -0
- data/ext/src/src/concatenatedPreGraph.h +29 -0
- data/ext/src/src/correctedGraph.c +2643 -0
- data/ext/src/src/correctedGraph.h +32 -0
- data/ext/src/src/dfib.c +509 -0
- data/ext/src/src/dfib.h +69 -0
- data/ext/src/src/dfibHeap.c +89 -0
- data/ext/src/src/dfibHeap.h +39 -0
- data/ext/src/src/dfibpriv.h +105 -0
- data/ext/src/src/fib.c +628 -0
- data/ext/src/src/fib.h +78 -0
- data/ext/src/src/fibHeap.c +79 -0
- data/ext/src/src/fibHeap.h +41 -0
- data/ext/src/src/fibpriv.h +110 -0
- data/ext/src/src/globals.h +154 -0
- data/ext/src/src/graph.c +3932 -0
- data/ext/src/src/graph.h +233 -0
- data/ext/src/src/graphReConstruction.c +1472 -0
- data/ext/src/src/graphReConstruction.h +30 -0
- data/ext/src/src/graphStats.c +2167 -0
- data/ext/src/src/graphStats.h +72 -0
- data/ext/src/src/graphStructures.h +52 -0
- data/ext/src/src/kmer.c +652 -0
- data/ext/src/src/kmer.h +73 -0
- data/ext/src/src/kmerOccurenceTable.c +236 -0
- data/ext/src/src/kmerOccurenceTable.h +44 -0
- data/ext/src/src/kseq.h +223 -0
- data/ext/src/src/locallyCorrectedGraph.c +557 -0
- data/ext/src/src/locallyCorrectedGraph.h +40 -0
- data/ext/src/src/passageMarker.c +677 -0
- data/ext/src/src/passageMarker.h +137 -0
- data/ext/src/src/preGraph.c +1717 -0
- data/ext/src/src/preGraph.h +106 -0
- data/ext/src/src/preGraphConstruction.c +990 -0
- data/ext/src/src/preGraphConstruction.h +26 -0
- data/ext/src/src/probe_node_finder.c +84 -0
- data/ext/src/src/probe_node_finder.h +6 -0
- data/ext/src/src/readCoherentGraph.c +557 -0
- data/ext/src/src/readCoherentGraph.h +30 -0
- data/ext/src/src/readSet.c +1734 -0
- data/ext/src/src/readSet.h +67 -0
- data/ext/src/src/readToNode.c +218 -0
- data/ext/src/src/readToNode.h +35 -0
- data/ext/src/src/recycleBin.c +199 -0
- data/ext/src/src/recycleBin.h +58 -0
- data/ext/src/src/roadMap.c +342 -0
- data/ext/src/src/roadMap.h +65 -0
- data/ext/src/src/run.c +318 -0
- data/ext/src/src/run.h +52 -0
- data/ext/src/src/run2.c +744 -0
- data/ext/src/src/runReadToNode.c +29 -0
- data/ext/src/src/scaffold.c +1876 -0
- data/ext/src/src/scaffold.h +64 -0
- data/ext/src/src/shortReadPairs.c +1243 -0
- data/ext/src/src/shortReadPairs.h +32 -0
- data/ext/src/src/splay.c +259 -0
- data/ext/src/src/splay.h +43 -0
- data/ext/src/src/splayTable.c +1315 -0
- data/ext/src/src/splayTable.h +31 -0
- data/ext/src/src/tightString.c +362 -0
- data/ext/src/src/tightString.h +82 -0
- data/ext/src/src/utility.c +199 -0
- data/ext/src/src/utility.h +98 -0
- data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
- data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
- data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
- data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
- data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
- data/ext/src/third-party/zlib-1.2.3/README +125 -0
- data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
- data/ext/src/third-party/zlib-1.2.3/adler32.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
- data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
- data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
- data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
- data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
- data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
- data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
- data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
- data/ext/src/third-party/zlib-1.2.3/compress.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/configure +459 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
- data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
- data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
- data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
- data/ext/src/third-party/zlib-1.2.3/crc32.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
- data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
- data/ext/src/third-party/zlib-1.2.3/deflate.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/example +0 -0
- data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
- data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
- data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
- data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
- data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
- data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
- data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
- data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
- data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
- data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
- data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
- data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
- data/ext/src/third-party/zlib-1.2.3/gzio.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
- data/ext/src/third-party/zlib-1.2.3/infback.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
- data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
- data/ext/src/third-party/zlib-1.2.3/inffast.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
- data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
- data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
- data/ext/src/third-party/zlib-1.2.3/inflate.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
- data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
- data/ext/src/third-party/zlib-1.2.3/inftrees.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/libz.a +0 -0
- data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
- data/ext/src/third-party/zlib-1.2.3/minigzip +0 -0
- data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
- data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
- data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
- data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
- data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
- data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
- data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
- data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
- data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
- data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
- data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
- data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
- data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
- data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
- data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
- data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
- data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
- data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
- data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
- data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
- data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
- data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
- data/ext/src/third-party/zlib-1.2.3/trees.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
- data/ext/src/third-party/zlib-1.2.3/uncompr.o +0 -0
- data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
- data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
- data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
- data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
- data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
- data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
- data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
- data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
- data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
- data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
- data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
- data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
- data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
- data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
- data/ext/src/third-party/zlib-1.2.3/zutil.o +0 -0
- data/lib/assembly/a_b_visualiser.rb +169 -0
- data/lib/assembly/acyclic_connection_finder.rb +81 -0
- data/lib/assembly/all_orfs.rb +615 -0
- data/lib/assembly/bad_format_writer.rb +46 -0
- data/lib/assembly/bam_probe_read_selector.rb +48 -0
- data/lib/assembly/bubbly_assembler.rb +842 -0
- data/lib/assembly/c_probe_node_finder.rb +38 -0
- data/lib/assembly/connection_interpreter.rb +350 -0
- data/lib/assembly/contig_printer.rb +400 -0
- data/lib/assembly/coverage_based_graph_filter.rb +68 -0
- data/lib/assembly/depth_first_search.rb +63 -0
- data/lib/assembly/dijkstra.rb +216 -0
- data/lib/assembly/fluffer.rb +253 -0
- data/lib/assembly/graph_explorer.rb +85 -0
- data/lib/assembly/graph_generator.rb +315 -0
- data/lib/assembly/height_finder.rb +355 -0
- data/lib/assembly/hybrid_velvet_graph.rb +70 -0
- data/lib/assembly/input_genome.rb +182 -0
- data/lib/assembly/kmer_coverage_based_path_filter.rb +65 -0
- data/lib/assembly/node_finder.rb +171 -0
- data/lib/assembly/oriented_node_trail.rb +507 -0
- data/lib/assembly/paired_end_assembler.rb +53 -0
- data/lib/assembly/paired_end_neighbour_finder.rb +176 -0
- data/lib/assembly/probed_graph.rb +105 -0
- data/lib/assembly/read_input.rb +79 -0
- data/lib/assembly/read_to_node.rb +37 -0
- data/lib/assembly/scaffold_breaker.rb +126 -0
- data/lib/assembly/sequence_hasher.rb +71 -0
- data/lib/assembly/single_coherent_paths_between_nodes.rb +533 -0
- data/lib/assembly/single_coherent_wanderer.rb +261 -0
- data/lib/assembly/single_ended_assembler.rb +441 -0
- data/lib/assembly/velvet_c_binding.rb +54 -0
- data/lib/assembly/velvet_graph_sequence_extractor.rb +123 -0
- data/lib/external/VERSION +1 -0
- data/lib/finishm/assemble.rb +224 -0
- data/lib/finishm/explore.rb +217 -0
- data/lib/finishm/finisher.rb +303 -0
- data/lib/finishm/fluff.rb +122 -0
- data/lib/finishm/gapfiller.rb +325 -0
- data/lib/finishm/orfs_finder.rb +88 -0
- data/lib/finishm/path_counter.rb +90 -0
- data/lib/finishm/primers.rb +425 -0
- data/lib/finishm/primers_check.rb +176 -0
- data/lib/finishm/roundup.rb +344 -0
- data/lib/finishm/sequence.rb +142 -0
- data/lib/finishm/visualise.rb +430 -0
- data/lib/finishm/wander.rb +270 -0
- data/lib/kmer_abundance_pattern.rb +79 -0
- data/lib/kmer_multi_abundance_file.rb +48 -0
- data/lib/oligo_designer.rb +88 -0
- data/lib/priner.rb +66 -0
- data/spec/acyclic_connection_finder_spec.rb +551 -0
- data/spec/all_orfs_spec.rb +443 -0
- data/spec/assemble_spec.rb +186 -0
- data/spec/bubbly_assembler_spec.rb +707 -0
- data/spec/c_node_finder_spec.rb +58 -0
- data/spec/connection_interpreter_spec.rb +284 -0
- data/spec/contig_printer_spec.rb +291 -0
- data/spec/coverage_based_graph_filter_spec.rb +102 -0
- data/spec/data/6_3e4e5e6e.1vANME.bam +0 -0
- data/spec/data/6_3e4e5e6e.1vANME.bam.bai +0 -0
- data/spec/data/acyclic_connection_finder/1/probes.fa +5 -0
- data/spec/data/acyclic_connection_finder/1/random1.fa +2 -0
- data/spec/data/acyclic_connection_finder/1/random1.sammy.fa.gz +0 -0
- data/spec/data/acyclic_connection_finder/1/random2.fa +2 -0
- data/spec/data/acyclic_connection_finder/1/random2.sammy.fa.gz +0 -0
- data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.fa +39 -0
- data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.slightly_changed.fa +39 -0
- data/spec/data/assembly/1_simple_bubble_uneven_coverage/reads_combined.fa.gz +0 -0
- data/spec/data/assembly_visualiser/Contig_6_1_to_250.fa.kmers31 +220 -0
- data/spec/data/assembly_visualiser/Contig_7_1_to_250.fa.kmers31 +220 -0
- data/spec/data/assembly_visualiser/Graph +46 -0
- data/spec/data/assembly_visualiser/start_kmers1 +2 -0
- data/spec/data/bands.csv +1 -0
- data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq +0 -0
- data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq.names +544 -0
- data/spec/data/c_probe_node_finder/1/Graph2 +668 -0
- data/spec/data/c_probe_node_finder/1/LastGraph +668 -0
- data/spec/data/c_probe_node_finder/1/Log +756 -0
- data/spec/data/c_probe_node_finder/1/PreGraph +11 -0
- data/spec/data/c_probe_node_finder/1/Roadmaps +2009 -0
- data/spec/data/c_probe_node_finder/1/contigs.fa +29 -0
- data/spec/data/c_probe_node_finder/1/stats.txt +6 -0
- data/spec/data/contig_printer/1/HOWTO_RECREATE +17 -0
- data/spec/data/contig_printer/1/contigs.fa +4 -0
- data/spec/data/contig_printer/1/seq.fa +2408 -0
- data/spec/data/contig_printer/1/seq.fa.svg +153 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/Graph2 +2953 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/LastGraph +2953 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/Log +21 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/PreGraph +27 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/Roadmaps +5182 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/Sequences +3612 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/contigs.fa +36 -0
- data/spec/data/contig_printer/1/seq.fa.velvet/stats.txt +14 -0
- data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam +0 -0
- data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam.bai +0 -0
- data/spec/data/contig_printer/1/seq.node12.fa +4 -0
- data/spec/data/contig_printer/1/seq1_1to550.fa +2 -0
- data/spec/data/contig_printer/1/seq2_1to550.fa +2 -0
- data/spec/data/contig_printer/1/seq2_1to550.fa.fai +1 -0
- data/spec/data/explore/1/2seqs.sammy.fa +12004 -0
- data/spec/data/explore/1/HOWTO_RECREATE.txt +6 -0
- data/spec/data/explore/1/a.fa +2 -0
- data/spec/data/explore/1/seq1_and_a.fa +3 -0
- data/spec/data/explore/1/seq2.fa +2 -0
- data/spec/data/fluff/1/2seqs.sammy.fa +12004 -0
- data/spec/data/fluff/1/HOWTO_RECREATE.txt +5 -0
- data/spec/data/fluff/1/seq1.fa +2 -0
- data/spec/data/fluff/1/seq2.fa +2 -0
- data/spec/data/gapfilling/1/reads.fa +171 -0
- data/spec/data/gapfilling/1/trail_with_Ns.fa +5 -0
- data/spec/data/gapfilling/1/velvetAssembly/Graph2 +130 -0
- data/spec/data/gapfilling/1/velvetAssembly/LastGraph +130 -0
- data/spec/data/gapfilling/1/velvetAssembly/Log +199 -0
- data/spec/data/gapfilling/1/velvetAssembly/PreGraph +7 -0
- data/spec/data/gapfilling/1/velvetAssembly/Roadmaps +239 -0
- data/spec/data/gapfilling/1/velvetAssembly/Sequences +281 -0
- data/spec/data/gapfilling/1/velvetAssembly/contigs.fa +12 -0
- data/spec/data/gapfilling/1/velvetAssembly/stats.txt +4 -0
- data/spec/data/gapfilling/2/HOWTO_recreate +17 -0
- data/spec/data/gapfilling/2/reference.fa +2 -0
- data/spec/data/gapfilling/2/reference_part1.fa +4 -0
- data/spec/data/gapfilling/2/reference_part2.fa +4 -0
- data/spec/data/gapfilling/2/sammy_reads.fa.gz +0 -0
- data/spec/data/gapfilling/2/with_gaps.fa +4 -0
- data/spec/data/gapfilling/3/HOWTO_recreate +4 -0
- data/spec/data/gapfilling/3/reads.fa.gz +0 -0
- data/spec/data/gapfilling/3/reference_part1.fa +4 -0
- data/spec/data/gapfilling/3/reference_part2.fa +4 -0
- data/spec/data/gapfilling/3/with_gaps.fa +4 -0
- data/spec/data/gapfilling/4/HOWTO_recreate +1 -0
- data/spec/data/gapfilling/4/reads.fa.gz +0 -0
- data/spec/data/gapfilling/5/HOWTO_RECREATE +7 -0
- data/spec/data/gapfilling/5/answer.fna +2 -0
- data/spec/data/gapfilling/5/gappy.fna +2 -0
- data/spec/data/gapfilling/5/reads.fa +17961 -0
- data/spec/data/gapfilling/5/velvet51_3.5/LastGraph +8337 -0
- data/spec/data/gapfilling/5/velvet51_3.5/Sequences +20921 -0
- data/spec/data/gapfilling/6/random1.fa +28 -0
- data/spec/data/gapfilling/6/random2.fa +28 -0
- data/spec/data/gapfilling/6/random_sequence_length_2000 +0 -0
- data/spec/data/gapfilling/6/reads.random1.fa.gz +0 -0
- data/spec/data/gapfilling/6/reads.random2.fa.gz +0 -0
- data/spec/data/gapfilling/6/to_gapfill.fa +22 -0
- data/spec/data/kmer_profile_to_assembly/multiple_abundance_file1.csv +2 -0
- data/spec/data/kmers_count1.csv +2 -0
- data/spec/data/kmers_count2.csv +3 -0
- data/spec/data/out +3 -0
- data/spec/data/positive_latching_pair.fa +2 -0
- data/spec/data/primers.csv +4 -0
- data/spec/data/read_selection_by_kmer/blacklist1.txt +1 -0
- data/spec/data/read_selection_by_kmer/input.fasta +6 -0
- data/spec/data/read_selection_by_kmer/whitelist1.txt +1 -0
- data/spec/data/read_selection_by_kmer/whitelist2.txt +2 -0
- data/spec/data/read_to_node/1_a_graph/HOWTO_RECREATE.txt +2 -0
- data/spec/data/read_to_node/1_a_graph/LastGraph +6695 -0
- data/spec/data/read_to_node/1_a_graph/ReadToNode.bin +0 -0
- data/spec/data/read_to_node/2_no_read256_or_259/HOWTO_RECREATE.txt +3 -0
- data/spec/data/read_to_node/2_no_read256_or_259/LastGraph +6693 -0
- data/spec/data/read_to_node/2_no_read256_or_259/ReadToNode.bin +0 -0
- data/spec/data/read_to_node/3_no_last_read/LastGraph +6694 -0
- data/spec/data/read_to_node/3_no_last_read/ReadToNode.bin +0 -0
- data/spec/data/t/details.txt +5 -0
- data/spec/data/t/details.txt.srt +5 -0
- data/spec/data/t/location.txt +3 -0
- data/spec/data/t/location.txt.srt +3 -0
- data/spec/data/tweak/1_gap_then_unscaffolded/answer.fa +2 -0
- data/spec/data/tweak/1_gap_then_unscaffolded/reads.fa.gz +0 -0
- data/spec/data/tweak/1_gap_then_unscaffolded/scaffolds.fa +6 -0
- data/spec/data/tweak/2_second_genome/answer2.fa +2 -0
- data/spec/data/tweak/2_second_genome/reads.fa.gz +0 -0
- data/spec/data/tweak/3_variant/answer.fa +2 -0
- data/spec/data/tweak/3_variant/lesser_answer.fa +2 -0
- data/spec/data/tweak/3_variant/reads.fa.gz +0 -0
- data/spec/data/tweak/3_variant/with_gaps.fa +2 -0
- data/spec/data/velvet_test_trails/Assem/Graph +17 -0
- data/spec/data/velvet_test_trails/Assem/Graph2 +40 -0
- data/spec/data/velvet_test_trails/Assem/LastGraph +40 -0
- data/spec/data/velvet_test_trails/Assem/Log +35 -0
- data/spec/data/velvet_test_trails/Assem/PreGraph +9 -0
- data/spec/data/velvet_test_trails/Assem/Roadmaps +89 -0
- data/spec/data/velvet_test_trails/Assem/Sequences +50 -0
- data/spec/data/velvet_test_trails/Assem/a.svg +53 -0
- data/spec/data/velvet_test_trails/Assem/contigs.fa +15 -0
- data/spec/data/velvet_test_trails/Assem/stats.txt +5 -0
- data/spec/data/velvet_test_trails/node_fwds.fa +8 -0
- data/spec/data/velvet_test_trails/node_seqs.fa +9 -0
- data/spec/data/velvet_test_trails/nodes_fwd_rev.fa +16 -0
- data/spec/data/velvet_test_trails/read1.fa +2 -0
- data/spec/data/velvet_test_trails/reads.fa +50 -0
- data/spec/data/velvet_test_trails_reverse/Assem/LastGraph +17 -0
- data/spec/data/velvet_test_trails_reverse/Assem/a.svg +53 -0
- data/spec/data/velvet_test_trails_reverse/reads_reversed.fa +10 -0
- data/spec/data/visualise/1/LastGraph +6695 -0
- data/spec/data/visualise/2_paired_end/HOWTO_RECREATE.txt +10 -0
- data/spec/data/visualise/2_paired_end/rand1.fa +2 -0
- data/spec/data/visualise/2_paired_end/rand2.fa +2 -0
- data/spec/data/visualise/2_paired_end/with_gaps.fa +8 -0
- data/spec/data/visualise/2_paired_end/with_gaps.read_pairs.fa.gz +0 -0
- data/spec/data/wander/1/random1.fa +2 -0
- data/spec/data/wander/1/random1.sammy.fa +804 -0
- data/spec/depth_first_search_spec.rb +190 -0
- data/spec/dijkstra_spec.rb +143 -0
- data/spec/explore_spec.rb +29 -0
- data/spec/fluffer_spec.rb +155 -0
- data/spec/gapfiller_spec.rb +107 -0
- data/spec/graph_explorer_spec.rb +475 -0
- data/spec/graph_generator_spec.rb +99 -0
- data/spec/height_finder_spec.rb +306 -0
- data/spec/kmer_abundance_pattern_spec.rb +56 -0
- data/spec/kmer_coverage_based_path_filter_spec.rb +73 -0
- data/spec/kmer_profile_finder_spec.rb +38 -0
- data/spec/kmers_count_tabulate_spec.rb +120 -0
- data/spec/oriented_node_trail_spec.rb +221 -0
- data/spec/paired_end_neighbours_spec.rb +126 -0
- data/spec/paths_between_nodes_spec.rb +349 -0
- data/spec/priner_spec.rb +7 -0
- data/spec/read_input_spec.rb +23 -0
- data/spec/read_selection_by_kmer_spec.rb +166 -0
- data/spec/read_to_node_spec.rb +35 -0
- data/spec/roundup_spec.rb +366 -0
- data/spec/scaffold_breaker_spec.rb +144 -0
- data/spec/sequence_spec.rb +43 -0
- data/spec/single_coherent_paths_between_nodes_spec.rb +492 -0
- data/spec/single_coherent_wanderer_spec.rb +120 -0
- data/spec/single_ended_assembler_spec.rb +398 -0
- data/spec/spec_helper.rb +310 -0
- data/spec/velvet_graph_sequence_extractor_spec.rb +80 -0
- data/spec/visualise_spec.rb +105 -0
- data/spec/wander_spec.rb +119 -0
- data/spec/watch_for_changes.sh +16 -0
- data/validation/fasta_compare.rb +72 -0
- data/validation/gapfill_simulate_perfect.rb +108 -0
- metadata +899 -0
data/ext/src/src/dfib.h
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
|
|
3
|
+
|
|
4
|
+
This file is part of Velvet.
|
|
5
|
+
|
|
6
|
+
Velvet is free software; you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Velvet is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with Velvet; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
/*-
|
|
22
|
+
* Copyright 1997, 1998-2003 John-Mark Gurney.
|
|
23
|
+
* All rights reserved.
|
|
24
|
+
*
|
|
25
|
+
* Redistribution and use in source and binary forms, with or without
|
|
26
|
+
* modification, are permitted provided that the following conditions
|
|
27
|
+
* are met:
|
|
28
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
29
|
+
* notice, this list of conditions and the following disclaimer.
|
|
30
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
31
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
32
|
+
* documentation and/or other materials provided with the distribution.
|
|
33
|
+
*
|
|
34
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
35
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
36
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
37
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
38
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
39
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
40
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
41
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
42
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
43
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
44
|
+
* SUCH DAMAGE.
|
|
45
|
+
*
|
|
46
|
+
* $Id: dfib.h,v 1.8 2007/04/24 12:16:41 zerbino Exp $
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
#ifndef _DFIB_H_
|
|
51
|
+
#define _DFIB_H_
|
|
52
|
+
|
|
53
|
+
#include "globals.h"
|
|
54
|
+
|
|
55
|
+
/* functions for key heaps */
|
|
56
|
+
DFibHeap *dfh_makekeyheap(void);
|
|
57
|
+
DFibHeapNode *dfh_insertkey(DFibHeap *, Time, void *);
|
|
58
|
+
Time dfh_replacekey(DFibHeap *, DFibHeapNode *, Time);
|
|
59
|
+
void *dfh_replacekeydata(DFibHeap *, DFibHeapNode *, Time, void *);
|
|
60
|
+
|
|
61
|
+
void *dfh_extractmin(DFibHeap *);
|
|
62
|
+
void *dfh_replacedata(DFibHeapNode *, void *);
|
|
63
|
+
void *dfh_delete(DFibHeap *, DFibHeapNode *);
|
|
64
|
+
void dfh_deleteheap(DFibHeap *);
|
|
65
|
+
|
|
66
|
+
IDnum dfibheap_getSize(DFibHeap *);
|
|
67
|
+
Time dfibheap_el_getKey(DFibHeapNode *);
|
|
68
|
+
|
|
69
|
+
#endif /* _FIB_H_ */
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
|
|
3
|
+
|
|
4
|
+
This file is part of Velvet.
|
|
5
|
+
|
|
6
|
+
Velvet is free software; you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Velvet is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with Velvet; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
#include <stdio.h>
|
|
23
|
+
|
|
24
|
+
#include "globals.h"
|
|
25
|
+
#include "dfib.h"
|
|
26
|
+
#include "utility.h"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
// Constructor
|
|
30
|
+
// Memory allocated
|
|
31
|
+
DFibHeap *newDFibHeap()
|
|
32
|
+
{
|
|
33
|
+
DFibHeap* dheap = dfh_makekeyheap();
|
|
34
|
+
if (dheap == NULL)
|
|
35
|
+
exitErrorf(EXIT_FAILURE, true, "Can't allocate DFibHeap");
|
|
36
|
+
|
|
37
|
+
return dheap;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Add new node into heap with a key, and a pointer to the specified node
|
|
41
|
+
DFibHeapNode *insertNodeIntoDHeap(DFibHeap * heap, Time key,
|
|
42
|
+
struct node_st * node)
|
|
43
|
+
{
|
|
44
|
+
DFibHeapNode *res;
|
|
45
|
+
res = dfh_insertkey(heap, key, node);
|
|
46
|
+
|
|
47
|
+
return res;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Replaces the key for a given node
|
|
51
|
+
Time replaceKeyInDHeap(DFibHeap * heap, DFibHeapNode * node, Time newKey)
|
|
52
|
+
{
|
|
53
|
+
Time res;
|
|
54
|
+
res = dfh_replacekey(heap, node, newKey);
|
|
55
|
+
|
|
56
|
+
return res;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Removes the node with the shortest key, then returns it.
|
|
60
|
+
Node *removeNextNodeFromDHeap(DFibHeap * heap)
|
|
61
|
+
{
|
|
62
|
+
Node *node;
|
|
63
|
+
node = (Node *) dfh_extractmin(heap);
|
|
64
|
+
|
|
65
|
+
return node;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Destructor
|
|
69
|
+
void destroyDHeap(DFibHeap * heap)
|
|
70
|
+
{
|
|
71
|
+
dfh_deleteheap(heap);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Replace the node pointed to by a heap node
|
|
75
|
+
void replaceValueInDHeap(DFibHeapNode * node, Node * newValue)
|
|
76
|
+
{
|
|
77
|
+
dfh_replacedata(node, newValue);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Remove unwanted node
|
|
81
|
+
void destroyNodeInDHeap(DFibHeapNode * node, DFibHeap * heap)
|
|
82
|
+
{
|
|
83
|
+
dfh_delete(heap, node);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Time getKey(DFibHeapNode * node)
|
|
87
|
+
{
|
|
88
|
+
return dfibheap_el_getKey(node);
|
|
89
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
|
|
3
|
+
|
|
4
|
+
This file is part of Velvet.
|
|
5
|
+
|
|
6
|
+
Velvet is free software; you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Velvet is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with Velvet; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
#ifndef _DFIBHEAP_H_
|
|
22
|
+
#define _DFIBHEAP_H_
|
|
23
|
+
|
|
24
|
+
DFibHeap *newDFibHeap();
|
|
25
|
+
|
|
26
|
+
DFibHeapNode *insertNodeIntoDHeap(DFibHeap * heap, Time key, Node * node);
|
|
27
|
+
|
|
28
|
+
Time replaceKeyInDHeap(DFibHeap * heap, DFibHeapNode * node, Time newKey);
|
|
29
|
+
|
|
30
|
+
Node *removeNextNodeFromDHeap(DFibHeap * heap);
|
|
31
|
+
|
|
32
|
+
void destroyDHeap(DFibHeap * heap);
|
|
33
|
+
|
|
34
|
+
void replaceValueInDHeap(DFibHeapNode * node, Node * newValue);
|
|
35
|
+
|
|
36
|
+
void *destroyNodeInDHeap(DFibHeapNode * node, DFibHeap * heap);
|
|
37
|
+
|
|
38
|
+
Time getKey(DFibHeapNode * node);
|
|
39
|
+
#endif
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
|
|
3
|
+
|
|
4
|
+
This file is part of Velvet.
|
|
5
|
+
|
|
6
|
+
Velvet is free software; you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Velvet is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with Velvet; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
/*-
|
|
22
|
+
* Copyright 1997, 1999-2003 John-Mark Gurney.
|
|
23
|
+
* All rights reserved.
|
|
24
|
+
*
|
|
25
|
+
* Redistribution and use in source and binary forms, with or without
|
|
26
|
+
* modification, are permitted provided that the following conditions
|
|
27
|
+
* are met:
|
|
28
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
29
|
+
* notice, this list of conditions and the following disclaimer.
|
|
30
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
31
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
32
|
+
* documentation and/or other materials provided with the distribution.
|
|
33
|
+
*
|
|
34
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
35
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
36
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
37
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
38
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
39
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
40
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
41
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
42
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
43
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
44
|
+
* SUCH DAMAGE.
|
|
45
|
+
*
|
|
46
|
+
* $Id: dfibpriv.h,v 1.8 2007/10/09 09:56:46 zerbino Exp $
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
#ifndef _DFIBPRIV_H_
|
|
51
|
+
#define _DFIBPRIV_H_
|
|
52
|
+
|
|
53
|
+
#include "globals.h"
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* specific node operations
|
|
57
|
+
*/
|
|
58
|
+
struct dfibheap_el {
|
|
59
|
+
DFibHeapNode *dfhe_p;
|
|
60
|
+
DFibHeapNode *dfhe_child;
|
|
61
|
+
DFibHeapNode *dfhe_left;
|
|
62
|
+
DFibHeapNode *dfhe_right;
|
|
63
|
+
void *dfhe_data;
|
|
64
|
+
Time dfhe_key;
|
|
65
|
+
int dfhe_degree;
|
|
66
|
+
boolean dfhe_mark;
|
|
67
|
+
} ATTRIBUTE_PACKED;
|
|
68
|
+
|
|
69
|
+
static DFibHeapNode *dfhe_newelem(DFibHeap *);
|
|
70
|
+
static void dfhe_insertafter(DFibHeapNode * a, DFibHeapNode * b);
|
|
71
|
+
static inline void dfhe_insertbefore(DFibHeapNode * a, DFibHeapNode * b);
|
|
72
|
+
static DFibHeapNode *dfhe_remove(DFibHeapNode * a);
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* global heap operations
|
|
76
|
+
*/
|
|
77
|
+
struct dfibheap {
|
|
78
|
+
RecycleBin *nodeMemory;
|
|
79
|
+
DFibHeapNode **dfh_cons;
|
|
80
|
+
DFibHeapNode *dfh_min;
|
|
81
|
+
DFibHeapNode *dfh_root;
|
|
82
|
+
IDnum dfh_n;
|
|
83
|
+
IDnum dfh_Dl;
|
|
84
|
+
} ATTRIBUTE_PACKED;
|
|
85
|
+
|
|
86
|
+
static void dfh_insertrootlist(DFibHeap *, DFibHeapNode *);
|
|
87
|
+
static void dfh_removerootlist(DFibHeap *, DFibHeapNode *);
|
|
88
|
+
static void dfh_consolidate(DFibHeap *);
|
|
89
|
+
static void dfh_heaplink(DFibHeap * h, DFibHeapNode * y, DFibHeapNode * x);
|
|
90
|
+
static void dfh_cut(DFibHeap *, DFibHeapNode *, DFibHeapNode *);
|
|
91
|
+
static void dfh_cascading_cut(DFibHeap *, DFibHeapNode *);
|
|
92
|
+
static DFibHeapNode *dfh_extractminel(DFibHeap *);
|
|
93
|
+
static void dfh_checkcons(DFibHeap * h);
|
|
94
|
+
static int dfh_compare(DFibHeap * h, DFibHeapNode * a, DFibHeapNode * b);
|
|
95
|
+
static int dfh_comparedata(DFibHeap * h, Time key,
|
|
96
|
+
void *data, DFibHeapNode * b);
|
|
97
|
+
static void dfh_insertel(DFibHeap * h, DFibHeapNode * x);
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* general functions
|
|
102
|
+
*/
|
|
103
|
+
static inline IDnum ceillog2(IDnum a);
|
|
104
|
+
|
|
105
|
+
#endif /* _FIBPRIV_H_ */
|
data/ext/src/src/fib.c
ADDED
|
@@ -0,0 +1,628 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
|
|
3
|
+
|
|
4
|
+
This file is part of Velvet.
|
|
5
|
+
|
|
6
|
+
Velvet is free software; you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation; either version 2 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Velvet is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with Velvet; if not, write to the Free Software
|
|
18
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
/*-
|
|
22
|
+
* Copyright 1997-2003 John-Mark Gurney.
|
|
23
|
+
* All rights reserved.
|
|
24
|
+
*
|
|
25
|
+
* Redistribution and use in source and binary forms, with or without
|
|
26
|
+
* modification, are permitted provided that the following conditions
|
|
27
|
+
* are met:
|
|
28
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
29
|
+
* notice, this list of conditions and the following disclaimer.
|
|
30
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
31
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
32
|
+
* documentation and/or other materials provided with the distribution.
|
|
33
|
+
*
|
|
34
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
35
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
36
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
37
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
38
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
39
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
40
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
41
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
42
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
43
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
44
|
+
* SUCH DAMAGE.
|
|
45
|
+
*
|
|
46
|
+
* $Id: fib.c,v 1.10 2007/10/19 13:09:26 zerbino Exp $
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
#include <limits.h>
|
|
50
|
+
#include <stdlib.h>
|
|
51
|
+
|
|
52
|
+
#include "fib.h"
|
|
53
|
+
#include "recycleBin.h"
|
|
54
|
+
|
|
55
|
+
#include "fibpriv.h"
|
|
56
|
+
|
|
57
|
+
#define BLOCKSIZE 10000
|
|
58
|
+
|
|
59
|
+
static FibHeapNode *allocateFibHeapEl(FibHeap * heap)
|
|
60
|
+
{
|
|
61
|
+
return allocatePointer(heap->nodeMemory);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static void deallocateFibHeapEl(FibHeapNode * a, FibHeap * heap)
|
|
65
|
+
{
|
|
66
|
+
deallocatePointer(heap->nodeMemory, a);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#define swap(type, a, b) \
|
|
70
|
+
do { \
|
|
71
|
+
type c; \
|
|
72
|
+
c = a; \
|
|
73
|
+
a = b; \
|
|
74
|
+
b = c; \
|
|
75
|
+
} while (0) \
|
|
76
|
+
|
|
77
|
+
#define INT_BITS (sizeof(IDnum) * 8)
|
|
78
|
+
|
|
79
|
+
static inline IDnum ceillog2(IDnum a)
|
|
80
|
+
{
|
|
81
|
+
IDnum oa;
|
|
82
|
+
IDnum i;
|
|
83
|
+
IDnum b;
|
|
84
|
+
IDnum cons;
|
|
85
|
+
|
|
86
|
+
oa = a;
|
|
87
|
+
b = INT_BITS / 2;
|
|
88
|
+
i = 0;
|
|
89
|
+
while (b) {
|
|
90
|
+
i = (i << 1);
|
|
91
|
+
cons = ((IDnum) 1) << b;
|
|
92
|
+
if (a >= cons) {
|
|
93
|
+
a /= cons;
|
|
94
|
+
i = i | 1;
|
|
95
|
+
} else
|
|
96
|
+
a &= cons - 1;
|
|
97
|
+
b /= 2;
|
|
98
|
+
}
|
|
99
|
+
if ((((IDnum) 1 << i)) == oa)
|
|
100
|
+
return i;
|
|
101
|
+
else
|
|
102
|
+
return i + 1;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* Private Heap Functions
|
|
107
|
+
*/
|
|
108
|
+
static void fh_initheap(FibHeap * new)
|
|
109
|
+
{
|
|
110
|
+
new->fh_cmp_fnct = NULL;
|
|
111
|
+
new->nodeMemory = newRecycleBin(sizeof(FibHeapNode), BLOCKSIZE);
|
|
112
|
+
new->fh_neginf = NULL;
|
|
113
|
+
new->fh_n = 0;
|
|
114
|
+
new->fh_Dl = -1;
|
|
115
|
+
new->fh_cons = NULL;
|
|
116
|
+
new->fh_min = NULL;
|
|
117
|
+
new->fh_root = NULL;
|
|
118
|
+
new->fh_keys = 0;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static void fh_destroyheap(FibHeap * h)
|
|
122
|
+
{
|
|
123
|
+
h->fh_cmp_fnct = NULL;
|
|
124
|
+
h->fh_neginf = NULL;
|
|
125
|
+
if (h->fh_cons != NULL)
|
|
126
|
+
free(h->fh_cons);
|
|
127
|
+
h->fh_cons = NULL;
|
|
128
|
+
free(h);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
* Public Heap Functions
|
|
133
|
+
*/
|
|
134
|
+
FibHeap *fh_makekeyheap()
|
|
135
|
+
{
|
|
136
|
+
FibHeap *n;
|
|
137
|
+
|
|
138
|
+
if ((n = malloc(sizeof *n)) == NULL)
|
|
139
|
+
return NULL;
|
|
140
|
+
|
|
141
|
+
fh_initheap(n);
|
|
142
|
+
n->fh_keys = 1;
|
|
143
|
+
|
|
144
|
+
return n;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
FibHeap *fh_makeheap()
|
|
148
|
+
{
|
|
149
|
+
FibHeap *n;
|
|
150
|
+
|
|
151
|
+
if ((n = malloc(sizeof *n)) == NULL)
|
|
152
|
+
return NULL;
|
|
153
|
+
|
|
154
|
+
fh_initheap(n);
|
|
155
|
+
|
|
156
|
+
return n;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
voidcmp fh_setcmp(FibHeap * h, voidcmp fnct)
|
|
160
|
+
{
|
|
161
|
+
voidcmp oldfnct;
|
|
162
|
+
|
|
163
|
+
oldfnct = h->fh_cmp_fnct;
|
|
164
|
+
h->fh_cmp_fnct = fnct;
|
|
165
|
+
|
|
166
|
+
return oldfnct;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
void *fh_setneginf(FibHeap * h, void *data)
|
|
170
|
+
{
|
|
171
|
+
void *old;
|
|
172
|
+
|
|
173
|
+
old = h->fh_neginf;
|
|
174
|
+
h->fh_neginf = data;
|
|
175
|
+
|
|
176
|
+
return old;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
FibHeap *fh_union(FibHeap * ha, FibHeap * hb)
|
|
180
|
+
{
|
|
181
|
+
FibHeapNode *x;
|
|
182
|
+
|
|
183
|
+
if (ha->fh_root == NULL || hb->fh_root == NULL) {
|
|
184
|
+
/* either one or both are empty */
|
|
185
|
+
if (ha->fh_root == NULL) {
|
|
186
|
+
fh_destroyheap(ha);
|
|
187
|
+
return hb;
|
|
188
|
+
} else {
|
|
189
|
+
fh_destroyheap(hb);
|
|
190
|
+
return ha;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
ha->fh_root->fhe_left->fhe_right = hb->fh_root;
|
|
194
|
+
hb->fh_root->fhe_left->fhe_right = ha->fh_root;
|
|
195
|
+
x = ha->fh_root->fhe_left;
|
|
196
|
+
ha->fh_root->fhe_left = hb->fh_root->fhe_left;
|
|
197
|
+
hb->fh_root->fhe_left = x;
|
|
198
|
+
ha->fh_n += hb->fh_n;
|
|
199
|
+
/*
|
|
200
|
+
* we probably should also keep stats on number of unions
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
/* set fh_min if necessary */
|
|
204
|
+
if (fh_compare(ha, hb->fh_min, ha->fh_min) < 0)
|
|
205
|
+
ha->fh_min = hb->fh_min;
|
|
206
|
+
|
|
207
|
+
fh_destroyheap(hb);
|
|
208
|
+
return ha;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
void fh_deleteheap(FibHeap * h)
|
|
212
|
+
{
|
|
213
|
+
destroyRecycleBin(h->nodeMemory);
|
|
214
|
+
fh_destroyheap(h);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/*
|
|
218
|
+
* Public Key Heap Functions
|
|
219
|
+
*/
|
|
220
|
+
FibHeapNode *fh_insertkey(FibHeap * h, Coordinate key, void *data)
|
|
221
|
+
{
|
|
222
|
+
FibHeapNode *x;
|
|
223
|
+
|
|
224
|
+
if ((x = fhe_newelem(h)) == NULL)
|
|
225
|
+
return NULL;
|
|
226
|
+
|
|
227
|
+
/* just insert on root list, and make sure it's not the new min */
|
|
228
|
+
x->fhe_data = data;
|
|
229
|
+
x->fhe_key = key;
|
|
230
|
+
|
|
231
|
+
fh_insertel(h, x);
|
|
232
|
+
|
|
233
|
+
return x;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
Coordinate fh_minkey(FibHeap * h)
|
|
237
|
+
{
|
|
238
|
+
if (h->fh_min == NULL)
|
|
239
|
+
return (Coordinate) INT_MIN;
|
|
240
|
+
return h->fh_min->fhe_key;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
Coordinate fh_replacekey(FibHeap * h, FibHeapNode * x, Coordinate key)
|
|
244
|
+
{
|
|
245
|
+
Coordinate ret;
|
|
246
|
+
|
|
247
|
+
ret = x->fhe_key;
|
|
248
|
+
(void) fh_replacekeydata(h, x, key, x->fhe_data);
|
|
249
|
+
|
|
250
|
+
return ret;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
void *fh_replacekeydata(FibHeap * h, FibHeapNode * x,
|
|
254
|
+
Coordinate key, void *data)
|
|
255
|
+
{
|
|
256
|
+
void *odata;
|
|
257
|
+
Coordinate okey;
|
|
258
|
+
FibHeapNode *y;
|
|
259
|
+
int r;
|
|
260
|
+
|
|
261
|
+
odata = x->fhe_data;
|
|
262
|
+
okey = x->fhe_key;
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* we can increase a key by deleting and reinserting, that
|
|
266
|
+
* requires O(lgn) time.
|
|
267
|
+
*/
|
|
268
|
+
if ((r = fh_comparedata(h, key, data, x)) > 0) {
|
|
269
|
+
/* XXX - bad code! */
|
|
270
|
+
abort();
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
x->fhe_data = data;
|
|
274
|
+
x->fhe_key = key;
|
|
275
|
+
|
|
276
|
+
/* because they are equal, we don't have to do anything */
|
|
277
|
+
if (r == 0)
|
|
278
|
+
return odata;
|
|
279
|
+
|
|
280
|
+
y = x->fhe_p;
|
|
281
|
+
|
|
282
|
+
if (h->fh_keys && okey == key)
|
|
283
|
+
return odata;
|
|
284
|
+
|
|
285
|
+
if (y != NULL && fh_compare(h, x, y) <= 0) {
|
|
286
|
+
fh_cut(h, x, y);
|
|
287
|
+
fh_cascading_cut(h, y);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/*
|
|
291
|
+
* the = is so that the call from fh_delete will delete the proper
|
|
292
|
+
* element.
|
|
293
|
+
*/
|
|
294
|
+
if (fh_compare(h, x, h->fh_min) <= 0)
|
|
295
|
+
h->fh_min = x;
|
|
296
|
+
|
|
297
|
+
return odata;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/*
|
|
301
|
+
* Public void * Heap Functions
|
|
302
|
+
*/
|
|
303
|
+
/*
|
|
304
|
+
* this will return these values:
|
|
305
|
+
* NULL failed for some reason
|
|
306
|
+
* ptr token to use for manipulation of data
|
|
307
|
+
*/
|
|
308
|
+
FibHeapNode *fh_insert(FibHeap * h, void *data)
|
|
309
|
+
{
|
|
310
|
+
FibHeapNode *x;
|
|
311
|
+
|
|
312
|
+
if ((x = fhe_newelem(h)) == NULL)
|
|
313
|
+
return NULL;
|
|
314
|
+
|
|
315
|
+
/* just insert on root list, and make sure it's not the new min */
|
|
316
|
+
x->fhe_data = data;
|
|
317
|
+
|
|
318
|
+
fh_insertel(h, x);
|
|
319
|
+
|
|
320
|
+
return x;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
void *fh_min(FibHeap * h)
|
|
324
|
+
{
|
|
325
|
+
if (h->fh_min == NULL)
|
|
326
|
+
return NULL;
|
|
327
|
+
return h->fh_min->fhe_data;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
void *fh_extractmin(FibHeap * h)
|
|
331
|
+
{
|
|
332
|
+
FibHeapNode *z;
|
|
333
|
+
void *ret;
|
|
334
|
+
|
|
335
|
+
ret = NULL;
|
|
336
|
+
|
|
337
|
+
if (h->fh_min != NULL) {
|
|
338
|
+
z = fh_extractminel(h);
|
|
339
|
+
ret = z->fhe_data;
|
|
340
|
+
#ifndef NO_FREE
|
|
341
|
+
deallocateFibHeapEl(z, h);
|
|
342
|
+
#endif
|
|
343
|
+
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
return ret;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
void *fh_replacedata(FibHeapNode * x, void *data)
|
|
350
|
+
{
|
|
351
|
+
void *odata = x->fhe_data;
|
|
352
|
+
x->fhe_data = data;
|
|
353
|
+
return odata;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
void *fh_delete(FibHeap * h, FibHeapNode * x)
|
|
357
|
+
{
|
|
358
|
+
void *k;
|
|
359
|
+
|
|
360
|
+
k = x->fhe_data;
|
|
361
|
+
if (!h->fh_keys)
|
|
362
|
+
fh_replacedata(x, h->fh_neginf);
|
|
363
|
+
else
|
|
364
|
+
fh_replacekey(h, x, (Coordinate) INT_MIN);
|
|
365
|
+
fh_extractmin(h);
|
|
366
|
+
|
|
367
|
+
return k;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/*
|
|
371
|
+
* begin of private element fuctions
|
|
372
|
+
*/
|
|
373
|
+
static FibHeapNode *fh_extractminel(FibHeap * h)
|
|
374
|
+
{
|
|
375
|
+
FibHeapNode *ret;
|
|
376
|
+
FibHeapNode *x, *y, *orig;
|
|
377
|
+
|
|
378
|
+
ret = h->fh_min;
|
|
379
|
+
|
|
380
|
+
orig = NULL;
|
|
381
|
+
/* put all the children on the root list */
|
|
382
|
+
/* for true consistancy, we should use fhe_remove */
|
|
383
|
+
for (x = ret->fhe_child; x != orig && x != NULL;) {
|
|
384
|
+
if (orig == NULL)
|
|
385
|
+
orig = x;
|
|
386
|
+
y = x->fhe_right;
|
|
387
|
+
x->fhe_p = NULL;
|
|
388
|
+
fh_insertrootlist(h, x);
|
|
389
|
+
x = y;
|
|
390
|
+
}
|
|
391
|
+
/* remove minimum from root list */
|
|
392
|
+
fh_removerootlist(h, ret);
|
|
393
|
+
h->fh_n--;
|
|
394
|
+
|
|
395
|
+
/* if we aren't empty, consolidate the heap */
|
|
396
|
+
if (h->fh_n == 0)
|
|
397
|
+
h->fh_min = NULL;
|
|
398
|
+
else {
|
|
399
|
+
h->fh_min = ret->fhe_right;
|
|
400
|
+
fh_consolidate(h);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return ret;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
static void fh_insertrootlist(FibHeap * h, FibHeapNode * x)
|
|
407
|
+
{
|
|
408
|
+
if (h->fh_root == NULL) {
|
|
409
|
+
h->fh_root = x;
|
|
410
|
+
x->fhe_left = x;
|
|
411
|
+
x->fhe_right = x;
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
fhe_insertafter(h->fh_root, x);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
static void fh_removerootlist(FibHeap * h, FibHeapNode * x)
|
|
419
|
+
{
|
|
420
|
+
if (x->fhe_left == x)
|
|
421
|
+
h->fh_root = NULL;
|
|
422
|
+
else
|
|
423
|
+
h->fh_root = fhe_remove(x);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
static void fh_consolidate(FibHeap * h)
|
|
427
|
+
{
|
|
428
|
+
FibHeapNode **a;
|
|
429
|
+
FibHeapNode *w;
|
|
430
|
+
FibHeapNode *y;
|
|
431
|
+
FibHeapNode *x;
|
|
432
|
+
IDnum i;
|
|
433
|
+
IDnum d;
|
|
434
|
+
IDnum D;
|
|
435
|
+
|
|
436
|
+
fh_checkcons(h);
|
|
437
|
+
|
|
438
|
+
/* assign a the value of h->fh_cons so I don't have to rewrite code */
|
|
439
|
+
D = h->fh_Dl + 1;
|
|
440
|
+
a = h->fh_cons;
|
|
441
|
+
|
|
442
|
+
for (i = 0; i < D; i++)
|
|
443
|
+
a[i] = NULL;
|
|
444
|
+
|
|
445
|
+
while ((w = h->fh_root) != NULL) {
|
|
446
|
+
x = w;
|
|
447
|
+
fh_removerootlist(h, w);
|
|
448
|
+
d = x->fhe_degree;
|
|
449
|
+
/* XXX - assert that d < D */
|
|
450
|
+
while (a[d] != NULL) {
|
|
451
|
+
y = a[d];
|
|
452
|
+
if (fh_compare(h, x, y) > 0)
|
|
453
|
+
swap(FibHeapNode *, x, y);
|
|
454
|
+
fh_heaplink(h, y, x);
|
|
455
|
+
a[d] = NULL;
|
|
456
|
+
d++;
|
|
457
|
+
}
|
|
458
|
+
a[d] = x;
|
|
459
|
+
}
|
|
460
|
+
h->fh_min = NULL;
|
|
461
|
+
for (i = 0; i < D; i++)
|
|
462
|
+
if (a[i] != NULL) {
|
|
463
|
+
fh_insertrootlist(h, a[i]);
|
|
464
|
+
if (h->fh_min == NULL
|
|
465
|
+
|| fh_compare(h, a[i], h->fh_min) < 0)
|
|
466
|
+
h->fh_min = a[i];
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
static void fh_heaplink(FibHeap * h, FibHeapNode * y, FibHeapNode * x)
|
|
471
|
+
{
|
|
472
|
+
/* make y a child of x */
|
|
473
|
+
if (x->fhe_child == NULL)
|
|
474
|
+
x->fhe_child = y;
|
|
475
|
+
else
|
|
476
|
+
fhe_insertbefore(x->fhe_child, y);
|
|
477
|
+
y->fhe_p = x;
|
|
478
|
+
x->fhe_degree++;
|
|
479
|
+
y->fhe_mark = 0;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
static void fh_cut(FibHeap * h, FibHeapNode * x, FibHeapNode * y)
|
|
483
|
+
{
|
|
484
|
+
fhe_remove(x);
|
|
485
|
+
y->fhe_degree--;
|
|
486
|
+
fh_insertrootlist(h, x);
|
|
487
|
+
x->fhe_p = NULL;
|
|
488
|
+
x->fhe_mark = 0;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
static void fh_cascading_cut(FibHeap * h, FibHeapNode * y)
|
|
492
|
+
{
|
|
493
|
+
FibHeapNode *z;
|
|
494
|
+
|
|
495
|
+
while ((z = y->fhe_p) != NULL) {
|
|
496
|
+
if (y->fhe_mark == 0) {
|
|
497
|
+
y->fhe_mark = 1;
|
|
498
|
+
return;
|
|
499
|
+
} else {
|
|
500
|
+
fh_cut(h, y, z);
|
|
501
|
+
y = z;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/*
|
|
507
|
+
* begining of handling elements of fibheap
|
|
508
|
+
*/
|
|
509
|
+
static FibHeapNode *fhe_newelem(FibHeap * h)
|
|
510
|
+
{
|
|
511
|
+
FibHeapNode *e;
|
|
512
|
+
|
|
513
|
+
if ((e = allocateFibHeapEl(h)) == NULL)
|
|
514
|
+
return NULL;
|
|
515
|
+
|
|
516
|
+
fhe_initelem(e);
|
|
517
|
+
|
|
518
|
+
return e;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
static void fhe_initelem(FibHeapNode * e)
|
|
522
|
+
{
|
|
523
|
+
e->fhe_degree = 0;
|
|
524
|
+
e->fhe_mark = 0;
|
|
525
|
+
e->fhe_p = NULL;
|
|
526
|
+
e->fhe_child = NULL;
|
|
527
|
+
e->fhe_left = e;
|
|
528
|
+
e->fhe_right = e;
|
|
529
|
+
e->fhe_data = NULL;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
static void fhe_insertafter(FibHeapNode * a, FibHeapNode * b)
|
|
533
|
+
{
|
|
534
|
+
if (a == a->fhe_right) {
|
|
535
|
+
a->fhe_right = b;
|
|
536
|
+
a->fhe_left = b;
|
|
537
|
+
b->fhe_right = a;
|
|
538
|
+
b->fhe_left = a;
|
|
539
|
+
} else {
|
|
540
|
+
b->fhe_right = a->fhe_right;
|
|
541
|
+
a->fhe_right->fhe_left = b;
|
|
542
|
+
a->fhe_right = b;
|
|
543
|
+
b->fhe_left = a;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
static inline void fhe_insertbefore(FibHeapNode * a, FibHeapNode * b)
|
|
548
|
+
{
|
|
549
|
+
fhe_insertafter(a->fhe_left, b);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
static FibHeapNode *fhe_remove(FibHeapNode * x)
|
|
553
|
+
{
|
|
554
|
+
FibHeapNode *ret;
|
|
555
|
+
|
|
556
|
+
if (x == x->fhe_left)
|
|
557
|
+
ret = NULL;
|
|
558
|
+
else
|
|
559
|
+
ret = x->fhe_left;
|
|
560
|
+
|
|
561
|
+
/* fix the parent pointer */
|
|
562
|
+
if (x->fhe_p != NULL && x->fhe_p->fhe_child == x)
|
|
563
|
+
x->fhe_p->fhe_child = ret;
|
|
564
|
+
|
|
565
|
+
x->fhe_right->fhe_left = x->fhe_left;
|
|
566
|
+
x->fhe_left->fhe_right = x->fhe_right;
|
|
567
|
+
|
|
568
|
+
/* clear out hanging pointers */
|
|
569
|
+
x->fhe_p = NULL;
|
|
570
|
+
x->fhe_left = x;
|
|
571
|
+
x->fhe_right = x;
|
|
572
|
+
|
|
573
|
+
return ret;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
static void fh_checkcons(FibHeap * h)
|
|
577
|
+
{
|
|
578
|
+
IDnum oDl;
|
|
579
|
+
|
|
580
|
+
/* make sure we have enough memory allocated to "reorganize" */
|
|
581
|
+
if (h->fh_Dl == -1 || h->fh_n > (1 << h->fh_Dl)) {
|
|
582
|
+
oDl = h->fh_Dl;
|
|
583
|
+
if ((h->fh_Dl = ceillog2(h->fh_n) + 1) < 8)
|
|
584
|
+
h->fh_Dl = 8;
|
|
585
|
+
if (oDl != h->fh_Dl)
|
|
586
|
+
h->fh_cons =
|
|
587
|
+
(FibHeapNode **) realloc(h->fh_cons,
|
|
588
|
+
sizeof *h->
|
|
589
|
+
fh_cons *
|
|
590
|
+
(h->fh_Dl + 1));
|
|
591
|
+
if (h->fh_cons == NULL)
|
|
592
|
+
abort();
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
static int fh_compare(FibHeap * h, FibHeapNode * a, FibHeapNode * b)
|
|
597
|
+
{
|
|
598
|
+
if (a->fhe_key < b->fhe_key)
|
|
599
|
+
return -1;
|
|
600
|
+
if (a->fhe_key == b->fhe_key)
|
|
601
|
+
return 0;
|
|
602
|
+
return 1;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
static int
|
|
606
|
+
fh_comparedata(FibHeap * h, Coordinate key, void *data, FibHeapNode * b)
|
|
607
|
+
{
|
|
608
|
+
FibHeapNode a;
|
|
609
|
+
|
|
610
|
+
a.fhe_key = key;
|
|
611
|
+
a.fhe_data = data;
|
|
612
|
+
|
|
613
|
+
return fh_compare(h, &a, b);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
static void fh_insertel(FibHeap * h, FibHeapNode * x)
|
|
617
|
+
{
|
|
618
|
+
fh_insertrootlist(h, x);
|
|
619
|
+
|
|
620
|
+
if (h->fh_min == NULL
|
|
621
|
+
|| (h->fh_keys ? x->fhe_key <
|
|
622
|
+
h->fh_min->fhe_key : h->fh_cmp_fnct(x->fhe_data,
|
|
623
|
+
h->fh_min->fhe_data) <
|
|
624
|
+
0))
|
|
625
|
+
h->fh_min = x;
|
|
626
|
+
|
|
627
|
+
h->fh_n++;
|
|
628
|
+
}
|