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.
Files changed (554) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +59 -0
  8. data/Rakefile +51 -0
  9. data/VERSION +1 -0
  10. data/bin/assembly_visualiser +106 -0
  11. data/bin/check_primer_combinations.rb +73 -0
  12. data/bin/contig_joiner.rb +244 -0
  13. data/bin/contigs_against_assembly.rb +153 -0
  14. data/bin/finishm +143 -0
  15. data/bin/finishm_assembler +55 -0
  16. data/bin/finishm_gap_closer.rb +241 -0
  17. data/bin/kmer_abundance_file_tool.rb +49 -0
  18. data/bin/kmer_pattern_to_assembly.rb +377 -0
  19. data/bin/kmer_profile_finder.rb +92 -0
  20. data/bin/kmers_count_parse.d +52 -0
  21. data/bin/kmers_count_tabulate.d +123 -0
  22. data/bin/kmers_count_tabulate.rb +84 -0
  23. data/bin/pcr_result_parser.rb +108 -0
  24. data/bin/primer_finder.rb +119 -0
  25. data/bin/read_selection_by_kmer.d +174 -0
  26. data/bin/scaffold_by_pattern.rb +119 -0
  27. data/bin/scaffold_connection_possibilities_to_knowns.rb +193 -0
  28. data/bin/scaffold_end_coverages.rb +69 -0
  29. data/bin/trail_validator.rb +84 -0
  30. data/ext/mkrf_conf.rb +56 -0
  31. data/ext/src/Makefile +140 -0
  32. data/ext/src/src/allocArray.c +305 -0
  33. data/ext/src/src/allocArray.h +86 -0
  34. data/ext/src/src/autoOpen.c +107 -0
  35. data/ext/src/src/autoOpen.h +18 -0
  36. data/ext/src/src/binarySequences.c +813 -0
  37. data/ext/src/src/binarySequences.h +125 -0
  38. data/ext/src/src/concatenatedGraph.c +233 -0
  39. data/ext/src/src/concatenatedGraph.h +30 -0
  40. data/ext/src/src/concatenatedPreGraph.c +262 -0
  41. data/ext/src/src/concatenatedPreGraph.h +29 -0
  42. data/ext/src/src/correctedGraph.c +2643 -0
  43. data/ext/src/src/correctedGraph.h +32 -0
  44. data/ext/src/src/dfib.c +509 -0
  45. data/ext/src/src/dfib.h +69 -0
  46. data/ext/src/src/dfibHeap.c +89 -0
  47. data/ext/src/src/dfibHeap.h +39 -0
  48. data/ext/src/src/dfibpriv.h +105 -0
  49. data/ext/src/src/fib.c +628 -0
  50. data/ext/src/src/fib.h +78 -0
  51. data/ext/src/src/fibHeap.c +79 -0
  52. data/ext/src/src/fibHeap.h +41 -0
  53. data/ext/src/src/fibpriv.h +110 -0
  54. data/ext/src/src/globals.h +154 -0
  55. data/ext/src/src/graph.c +3932 -0
  56. data/ext/src/src/graph.h +233 -0
  57. data/ext/src/src/graphReConstruction.c +1472 -0
  58. data/ext/src/src/graphReConstruction.h +30 -0
  59. data/ext/src/src/graphStats.c +2167 -0
  60. data/ext/src/src/graphStats.h +72 -0
  61. data/ext/src/src/graphStructures.h +52 -0
  62. data/ext/src/src/kmer.c +652 -0
  63. data/ext/src/src/kmer.h +73 -0
  64. data/ext/src/src/kmerOccurenceTable.c +236 -0
  65. data/ext/src/src/kmerOccurenceTable.h +44 -0
  66. data/ext/src/src/kseq.h +223 -0
  67. data/ext/src/src/locallyCorrectedGraph.c +557 -0
  68. data/ext/src/src/locallyCorrectedGraph.h +40 -0
  69. data/ext/src/src/passageMarker.c +677 -0
  70. data/ext/src/src/passageMarker.h +137 -0
  71. data/ext/src/src/preGraph.c +1717 -0
  72. data/ext/src/src/preGraph.h +106 -0
  73. data/ext/src/src/preGraphConstruction.c +990 -0
  74. data/ext/src/src/preGraphConstruction.h +26 -0
  75. data/ext/src/src/probe_node_finder.c +84 -0
  76. data/ext/src/src/probe_node_finder.h +6 -0
  77. data/ext/src/src/readCoherentGraph.c +557 -0
  78. data/ext/src/src/readCoherentGraph.h +30 -0
  79. data/ext/src/src/readSet.c +1734 -0
  80. data/ext/src/src/readSet.h +67 -0
  81. data/ext/src/src/readToNode.c +218 -0
  82. data/ext/src/src/readToNode.h +35 -0
  83. data/ext/src/src/recycleBin.c +199 -0
  84. data/ext/src/src/recycleBin.h +58 -0
  85. data/ext/src/src/roadMap.c +342 -0
  86. data/ext/src/src/roadMap.h +65 -0
  87. data/ext/src/src/run.c +318 -0
  88. data/ext/src/src/run.h +52 -0
  89. data/ext/src/src/run2.c +744 -0
  90. data/ext/src/src/runReadToNode.c +29 -0
  91. data/ext/src/src/scaffold.c +1876 -0
  92. data/ext/src/src/scaffold.h +64 -0
  93. data/ext/src/src/shortReadPairs.c +1243 -0
  94. data/ext/src/src/shortReadPairs.h +32 -0
  95. data/ext/src/src/splay.c +259 -0
  96. data/ext/src/src/splay.h +43 -0
  97. data/ext/src/src/splayTable.c +1315 -0
  98. data/ext/src/src/splayTable.h +31 -0
  99. data/ext/src/src/tightString.c +362 -0
  100. data/ext/src/src/tightString.h +82 -0
  101. data/ext/src/src/utility.c +199 -0
  102. data/ext/src/src/utility.h +98 -0
  103. data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
  104. data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
  105. data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
  106. data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
  107. data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
  108. data/ext/src/third-party/zlib-1.2.3/README +125 -0
  109. data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
  110. data/ext/src/third-party/zlib-1.2.3/adler32.o +0 -0
  111. data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
  112. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
  113. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
  114. data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
  115. data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
  116. data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
  117. data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
  118. data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
  119. data/ext/src/third-party/zlib-1.2.3/compress.o +0 -0
  120. data/ext/src/third-party/zlib-1.2.3/configure +459 -0
  121. data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
  122. data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
  123. data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
  124. data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
  125. data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
  126. data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
  127. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
  128. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
  129. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
  130. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
  131. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
  132. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
  133. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
  134. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
  135. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
  136. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
  137. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
  138. data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
  139. data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
  140. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
  141. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
  142. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
  143. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
  144. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
  145. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
  146. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
  147. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
  148. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
  149. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
  150. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
  151. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  152. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  153. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  154. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  155. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  156. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  157. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  158. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  159. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  160. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  161. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  162. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
  163. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
  164. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
  165. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
  166. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
  167. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
  168. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
  169. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
  170. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
  171. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
  172. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
  173. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
  174. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
  175. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
  176. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
  177. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
  178. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
  179. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
  180. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
  181. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
  182. data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
  183. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
  184. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
  185. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
  186. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
  187. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
  188. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
  189. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
  190. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
  191. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
  192. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
  193. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
  194. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
  195. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
  196. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
  197. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
  198. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
  199. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
  200. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
  201. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
  202. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
  203. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
  204. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
  205. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
  206. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
  207. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
  208. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
  209. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
  210. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
  211. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
  212. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
  213. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
  214. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
  215. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
  216. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
  217. data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
  218. data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
  219. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
  220. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
  221. data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
  222. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
  223. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
  224. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
  225. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
  226. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
  227. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
  228. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  229. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
  230. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  231. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
  232. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  233. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
  234. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
  235. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  236. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  237. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
  238. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  239. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  240. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
  241. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  242. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
  243. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
  244. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  245. data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
  246. data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
  247. data/ext/src/third-party/zlib-1.2.3/crc32.o +0 -0
  248. data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
  249. data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
  250. data/ext/src/third-party/zlib-1.2.3/deflate.o +0 -0
  251. data/ext/src/third-party/zlib-1.2.3/example +0 -0
  252. data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
  253. data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
  254. data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
  255. data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
  256. data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
  257. data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
  258. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
  259. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
  260. data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
  261. data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
  262. data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
  263. data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
  264. data/ext/src/third-party/zlib-1.2.3/gzio.o +0 -0
  265. data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
  266. data/ext/src/third-party/zlib-1.2.3/infback.o +0 -0
  267. data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
  268. data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
  269. data/ext/src/third-party/zlib-1.2.3/inffast.o +0 -0
  270. data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
  271. data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
  272. data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
  273. data/ext/src/third-party/zlib-1.2.3/inflate.o +0 -0
  274. data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
  275. data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
  276. data/ext/src/third-party/zlib-1.2.3/inftrees.o +0 -0
  277. data/ext/src/third-party/zlib-1.2.3/libz.a +0 -0
  278. data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
  279. data/ext/src/third-party/zlib-1.2.3/minigzip +0 -0
  280. data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
  281. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
  282. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
  283. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
  284. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
  285. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
  286. data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
  287. data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
  288. data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
  289. data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
  290. data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
  291. data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
  292. data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
  293. data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
  294. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
  295. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
  296. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
  297. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
  298. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
  299. data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
  300. data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
  301. data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
  302. data/ext/src/third-party/zlib-1.2.3/trees.o +0 -0
  303. data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
  304. data/ext/src/third-party/zlib-1.2.3/uncompr.o +0 -0
  305. data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
  306. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
  307. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
  308. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
  309. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
  310. data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
  311. data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
  312. data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
  313. data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
  314. data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
  315. data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
  316. data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
  317. data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
  318. data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
  319. data/ext/src/third-party/zlib-1.2.3/zutil.o +0 -0
  320. data/lib/assembly/a_b_visualiser.rb +169 -0
  321. data/lib/assembly/acyclic_connection_finder.rb +81 -0
  322. data/lib/assembly/all_orfs.rb +615 -0
  323. data/lib/assembly/bad_format_writer.rb +46 -0
  324. data/lib/assembly/bam_probe_read_selector.rb +48 -0
  325. data/lib/assembly/bubbly_assembler.rb +842 -0
  326. data/lib/assembly/c_probe_node_finder.rb +38 -0
  327. data/lib/assembly/connection_interpreter.rb +350 -0
  328. data/lib/assembly/contig_printer.rb +400 -0
  329. data/lib/assembly/coverage_based_graph_filter.rb +68 -0
  330. data/lib/assembly/depth_first_search.rb +63 -0
  331. data/lib/assembly/dijkstra.rb +216 -0
  332. data/lib/assembly/fluffer.rb +253 -0
  333. data/lib/assembly/graph_explorer.rb +85 -0
  334. data/lib/assembly/graph_generator.rb +315 -0
  335. data/lib/assembly/height_finder.rb +355 -0
  336. data/lib/assembly/hybrid_velvet_graph.rb +70 -0
  337. data/lib/assembly/input_genome.rb +182 -0
  338. data/lib/assembly/kmer_coverage_based_path_filter.rb +65 -0
  339. data/lib/assembly/node_finder.rb +171 -0
  340. data/lib/assembly/oriented_node_trail.rb +507 -0
  341. data/lib/assembly/paired_end_assembler.rb +53 -0
  342. data/lib/assembly/paired_end_neighbour_finder.rb +176 -0
  343. data/lib/assembly/probed_graph.rb +105 -0
  344. data/lib/assembly/read_input.rb +79 -0
  345. data/lib/assembly/read_to_node.rb +37 -0
  346. data/lib/assembly/scaffold_breaker.rb +126 -0
  347. data/lib/assembly/sequence_hasher.rb +71 -0
  348. data/lib/assembly/single_coherent_paths_between_nodes.rb +533 -0
  349. data/lib/assembly/single_coherent_wanderer.rb +261 -0
  350. data/lib/assembly/single_ended_assembler.rb +441 -0
  351. data/lib/assembly/velvet_c_binding.rb +54 -0
  352. data/lib/assembly/velvet_graph_sequence_extractor.rb +123 -0
  353. data/lib/external/VERSION +1 -0
  354. data/lib/finishm/assemble.rb +224 -0
  355. data/lib/finishm/explore.rb +217 -0
  356. data/lib/finishm/finisher.rb +303 -0
  357. data/lib/finishm/fluff.rb +122 -0
  358. data/lib/finishm/gapfiller.rb +325 -0
  359. data/lib/finishm/orfs_finder.rb +88 -0
  360. data/lib/finishm/path_counter.rb +90 -0
  361. data/lib/finishm/primers.rb +425 -0
  362. data/lib/finishm/primers_check.rb +176 -0
  363. data/lib/finishm/roundup.rb +344 -0
  364. data/lib/finishm/sequence.rb +142 -0
  365. data/lib/finishm/visualise.rb +430 -0
  366. data/lib/finishm/wander.rb +270 -0
  367. data/lib/kmer_abundance_pattern.rb +79 -0
  368. data/lib/kmer_multi_abundance_file.rb +48 -0
  369. data/lib/oligo_designer.rb +88 -0
  370. data/lib/priner.rb +66 -0
  371. data/spec/acyclic_connection_finder_spec.rb +551 -0
  372. data/spec/all_orfs_spec.rb +443 -0
  373. data/spec/assemble_spec.rb +186 -0
  374. data/spec/bubbly_assembler_spec.rb +707 -0
  375. data/spec/c_node_finder_spec.rb +58 -0
  376. data/spec/connection_interpreter_spec.rb +284 -0
  377. data/spec/contig_printer_spec.rb +291 -0
  378. data/spec/coverage_based_graph_filter_spec.rb +102 -0
  379. data/spec/data/6_3e4e5e6e.1vANME.bam +0 -0
  380. data/spec/data/6_3e4e5e6e.1vANME.bam.bai +0 -0
  381. data/spec/data/acyclic_connection_finder/1/probes.fa +5 -0
  382. data/spec/data/acyclic_connection_finder/1/random1.fa +2 -0
  383. data/spec/data/acyclic_connection_finder/1/random1.sammy.fa.gz +0 -0
  384. data/spec/data/acyclic_connection_finder/1/random2.fa +2 -0
  385. data/spec/data/acyclic_connection_finder/1/random2.sammy.fa.gz +0 -0
  386. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.fa +39 -0
  387. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.slightly_changed.fa +39 -0
  388. data/spec/data/assembly/1_simple_bubble_uneven_coverage/reads_combined.fa.gz +0 -0
  389. data/spec/data/assembly_visualiser/Contig_6_1_to_250.fa.kmers31 +220 -0
  390. data/spec/data/assembly_visualiser/Contig_7_1_to_250.fa.kmers31 +220 -0
  391. data/spec/data/assembly_visualiser/Graph +46 -0
  392. data/spec/data/assembly_visualiser/start_kmers1 +2 -0
  393. data/spec/data/bands.csv +1 -0
  394. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq +0 -0
  395. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq.names +544 -0
  396. data/spec/data/c_probe_node_finder/1/Graph2 +668 -0
  397. data/spec/data/c_probe_node_finder/1/LastGraph +668 -0
  398. data/spec/data/c_probe_node_finder/1/Log +756 -0
  399. data/spec/data/c_probe_node_finder/1/PreGraph +11 -0
  400. data/spec/data/c_probe_node_finder/1/Roadmaps +2009 -0
  401. data/spec/data/c_probe_node_finder/1/contigs.fa +29 -0
  402. data/spec/data/c_probe_node_finder/1/stats.txt +6 -0
  403. data/spec/data/contig_printer/1/HOWTO_RECREATE +17 -0
  404. data/spec/data/contig_printer/1/contigs.fa +4 -0
  405. data/spec/data/contig_printer/1/seq.fa +2408 -0
  406. data/spec/data/contig_printer/1/seq.fa.svg +153 -0
  407. data/spec/data/contig_printer/1/seq.fa.velvet/Graph2 +2953 -0
  408. data/spec/data/contig_printer/1/seq.fa.velvet/LastGraph +2953 -0
  409. data/spec/data/contig_printer/1/seq.fa.velvet/Log +21 -0
  410. data/spec/data/contig_printer/1/seq.fa.velvet/PreGraph +27 -0
  411. data/spec/data/contig_printer/1/seq.fa.velvet/Roadmaps +5182 -0
  412. data/spec/data/contig_printer/1/seq.fa.velvet/Sequences +3612 -0
  413. data/spec/data/contig_printer/1/seq.fa.velvet/contigs.fa +36 -0
  414. data/spec/data/contig_printer/1/seq.fa.velvet/stats.txt +14 -0
  415. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam +0 -0
  416. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam.bai +0 -0
  417. data/spec/data/contig_printer/1/seq.node12.fa +4 -0
  418. data/spec/data/contig_printer/1/seq1_1to550.fa +2 -0
  419. data/spec/data/contig_printer/1/seq2_1to550.fa +2 -0
  420. data/spec/data/contig_printer/1/seq2_1to550.fa.fai +1 -0
  421. data/spec/data/explore/1/2seqs.sammy.fa +12004 -0
  422. data/spec/data/explore/1/HOWTO_RECREATE.txt +6 -0
  423. data/spec/data/explore/1/a.fa +2 -0
  424. data/spec/data/explore/1/seq1_and_a.fa +3 -0
  425. data/spec/data/explore/1/seq2.fa +2 -0
  426. data/spec/data/fluff/1/2seqs.sammy.fa +12004 -0
  427. data/spec/data/fluff/1/HOWTO_RECREATE.txt +5 -0
  428. data/spec/data/fluff/1/seq1.fa +2 -0
  429. data/spec/data/fluff/1/seq2.fa +2 -0
  430. data/spec/data/gapfilling/1/reads.fa +171 -0
  431. data/spec/data/gapfilling/1/trail_with_Ns.fa +5 -0
  432. data/spec/data/gapfilling/1/velvetAssembly/Graph2 +130 -0
  433. data/spec/data/gapfilling/1/velvetAssembly/LastGraph +130 -0
  434. data/spec/data/gapfilling/1/velvetAssembly/Log +199 -0
  435. data/spec/data/gapfilling/1/velvetAssembly/PreGraph +7 -0
  436. data/spec/data/gapfilling/1/velvetAssembly/Roadmaps +239 -0
  437. data/spec/data/gapfilling/1/velvetAssembly/Sequences +281 -0
  438. data/spec/data/gapfilling/1/velvetAssembly/contigs.fa +12 -0
  439. data/spec/data/gapfilling/1/velvetAssembly/stats.txt +4 -0
  440. data/spec/data/gapfilling/2/HOWTO_recreate +17 -0
  441. data/spec/data/gapfilling/2/reference.fa +2 -0
  442. data/spec/data/gapfilling/2/reference_part1.fa +4 -0
  443. data/spec/data/gapfilling/2/reference_part2.fa +4 -0
  444. data/spec/data/gapfilling/2/sammy_reads.fa.gz +0 -0
  445. data/spec/data/gapfilling/2/with_gaps.fa +4 -0
  446. data/spec/data/gapfilling/3/HOWTO_recreate +4 -0
  447. data/spec/data/gapfilling/3/reads.fa.gz +0 -0
  448. data/spec/data/gapfilling/3/reference_part1.fa +4 -0
  449. data/spec/data/gapfilling/3/reference_part2.fa +4 -0
  450. data/spec/data/gapfilling/3/with_gaps.fa +4 -0
  451. data/spec/data/gapfilling/4/HOWTO_recreate +1 -0
  452. data/spec/data/gapfilling/4/reads.fa.gz +0 -0
  453. data/spec/data/gapfilling/5/HOWTO_RECREATE +7 -0
  454. data/spec/data/gapfilling/5/answer.fna +2 -0
  455. data/spec/data/gapfilling/5/gappy.fna +2 -0
  456. data/spec/data/gapfilling/5/reads.fa +17961 -0
  457. data/spec/data/gapfilling/5/velvet51_3.5/LastGraph +8337 -0
  458. data/spec/data/gapfilling/5/velvet51_3.5/Sequences +20921 -0
  459. data/spec/data/gapfilling/6/random1.fa +28 -0
  460. data/spec/data/gapfilling/6/random2.fa +28 -0
  461. data/spec/data/gapfilling/6/random_sequence_length_2000 +0 -0
  462. data/spec/data/gapfilling/6/reads.random1.fa.gz +0 -0
  463. data/spec/data/gapfilling/6/reads.random2.fa.gz +0 -0
  464. data/spec/data/gapfilling/6/to_gapfill.fa +22 -0
  465. data/spec/data/kmer_profile_to_assembly/multiple_abundance_file1.csv +2 -0
  466. data/spec/data/kmers_count1.csv +2 -0
  467. data/spec/data/kmers_count2.csv +3 -0
  468. data/spec/data/out +3 -0
  469. data/spec/data/positive_latching_pair.fa +2 -0
  470. data/spec/data/primers.csv +4 -0
  471. data/spec/data/read_selection_by_kmer/blacklist1.txt +1 -0
  472. data/spec/data/read_selection_by_kmer/input.fasta +6 -0
  473. data/spec/data/read_selection_by_kmer/whitelist1.txt +1 -0
  474. data/spec/data/read_selection_by_kmer/whitelist2.txt +2 -0
  475. data/spec/data/read_to_node/1_a_graph/HOWTO_RECREATE.txt +2 -0
  476. data/spec/data/read_to_node/1_a_graph/LastGraph +6695 -0
  477. data/spec/data/read_to_node/1_a_graph/ReadToNode.bin +0 -0
  478. data/spec/data/read_to_node/2_no_read256_or_259/HOWTO_RECREATE.txt +3 -0
  479. data/spec/data/read_to_node/2_no_read256_or_259/LastGraph +6693 -0
  480. data/spec/data/read_to_node/2_no_read256_or_259/ReadToNode.bin +0 -0
  481. data/spec/data/read_to_node/3_no_last_read/LastGraph +6694 -0
  482. data/spec/data/read_to_node/3_no_last_read/ReadToNode.bin +0 -0
  483. data/spec/data/t/details.txt +5 -0
  484. data/spec/data/t/details.txt.srt +5 -0
  485. data/spec/data/t/location.txt +3 -0
  486. data/spec/data/t/location.txt.srt +3 -0
  487. data/spec/data/tweak/1_gap_then_unscaffolded/answer.fa +2 -0
  488. data/spec/data/tweak/1_gap_then_unscaffolded/reads.fa.gz +0 -0
  489. data/spec/data/tweak/1_gap_then_unscaffolded/scaffolds.fa +6 -0
  490. data/spec/data/tweak/2_second_genome/answer2.fa +2 -0
  491. data/spec/data/tweak/2_second_genome/reads.fa.gz +0 -0
  492. data/spec/data/tweak/3_variant/answer.fa +2 -0
  493. data/spec/data/tweak/3_variant/lesser_answer.fa +2 -0
  494. data/spec/data/tweak/3_variant/reads.fa.gz +0 -0
  495. data/spec/data/tweak/3_variant/with_gaps.fa +2 -0
  496. data/spec/data/velvet_test_trails/Assem/Graph +17 -0
  497. data/spec/data/velvet_test_trails/Assem/Graph2 +40 -0
  498. data/spec/data/velvet_test_trails/Assem/LastGraph +40 -0
  499. data/spec/data/velvet_test_trails/Assem/Log +35 -0
  500. data/spec/data/velvet_test_trails/Assem/PreGraph +9 -0
  501. data/spec/data/velvet_test_trails/Assem/Roadmaps +89 -0
  502. data/spec/data/velvet_test_trails/Assem/Sequences +50 -0
  503. data/spec/data/velvet_test_trails/Assem/a.svg +53 -0
  504. data/spec/data/velvet_test_trails/Assem/contigs.fa +15 -0
  505. data/spec/data/velvet_test_trails/Assem/stats.txt +5 -0
  506. data/spec/data/velvet_test_trails/node_fwds.fa +8 -0
  507. data/spec/data/velvet_test_trails/node_seqs.fa +9 -0
  508. data/spec/data/velvet_test_trails/nodes_fwd_rev.fa +16 -0
  509. data/spec/data/velvet_test_trails/read1.fa +2 -0
  510. data/spec/data/velvet_test_trails/reads.fa +50 -0
  511. data/spec/data/velvet_test_trails_reverse/Assem/LastGraph +17 -0
  512. data/spec/data/velvet_test_trails_reverse/Assem/a.svg +53 -0
  513. data/spec/data/velvet_test_trails_reverse/reads_reversed.fa +10 -0
  514. data/spec/data/visualise/1/LastGraph +6695 -0
  515. data/spec/data/visualise/2_paired_end/HOWTO_RECREATE.txt +10 -0
  516. data/spec/data/visualise/2_paired_end/rand1.fa +2 -0
  517. data/spec/data/visualise/2_paired_end/rand2.fa +2 -0
  518. data/spec/data/visualise/2_paired_end/with_gaps.fa +8 -0
  519. data/spec/data/visualise/2_paired_end/with_gaps.read_pairs.fa.gz +0 -0
  520. data/spec/data/wander/1/random1.fa +2 -0
  521. data/spec/data/wander/1/random1.sammy.fa +804 -0
  522. data/spec/depth_first_search_spec.rb +190 -0
  523. data/spec/dijkstra_spec.rb +143 -0
  524. data/spec/explore_spec.rb +29 -0
  525. data/spec/fluffer_spec.rb +155 -0
  526. data/spec/gapfiller_spec.rb +107 -0
  527. data/spec/graph_explorer_spec.rb +475 -0
  528. data/spec/graph_generator_spec.rb +99 -0
  529. data/spec/height_finder_spec.rb +306 -0
  530. data/spec/kmer_abundance_pattern_spec.rb +56 -0
  531. data/spec/kmer_coverage_based_path_filter_spec.rb +73 -0
  532. data/spec/kmer_profile_finder_spec.rb +38 -0
  533. data/spec/kmers_count_tabulate_spec.rb +120 -0
  534. data/spec/oriented_node_trail_spec.rb +221 -0
  535. data/spec/paired_end_neighbours_spec.rb +126 -0
  536. data/spec/paths_between_nodes_spec.rb +349 -0
  537. data/spec/priner_spec.rb +7 -0
  538. data/spec/read_input_spec.rb +23 -0
  539. data/spec/read_selection_by_kmer_spec.rb +166 -0
  540. data/spec/read_to_node_spec.rb +35 -0
  541. data/spec/roundup_spec.rb +366 -0
  542. data/spec/scaffold_breaker_spec.rb +144 -0
  543. data/spec/sequence_spec.rb +43 -0
  544. data/spec/single_coherent_paths_between_nodes_spec.rb +492 -0
  545. data/spec/single_coherent_wanderer_spec.rb +120 -0
  546. data/spec/single_ended_assembler_spec.rb +398 -0
  547. data/spec/spec_helper.rb +310 -0
  548. data/spec/velvet_graph_sequence_extractor_spec.rb +80 -0
  549. data/spec/visualise_spec.rb +105 -0
  550. data/spec/wander_spec.rb +119 -0
  551. data/spec/watch_for_changes.sh +16 -0
  552. data/validation/fasta_compare.rb +72 -0
  553. data/validation/gapfill_simulate_perfect.rb +108 -0
  554. metadata +899 -0
@@ -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_ */
@@ -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
+ }