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,328 @@
1
+ ------------------------------------------------------------------------------
2
+ -- ZLib for Ada thick binding. --
3
+ -- --
4
+ -- Copyright (C) 2002-2004 Dmitriy Anisimkov --
5
+ -- --
6
+ -- This library 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 (at --
9
+ -- your option) any later version. --
10
+ -- --
11
+ -- This library is distributed in the hope that it will be useful, but --
12
+ -- WITHOUT ANY WARRANTY; without even the implied warranty of --
13
+ -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
14
+ -- General Public License for more details. --
15
+ -- --
16
+ -- You should have received a copy of the GNU General Public License --
17
+ -- along with this library; if not, write to the Free Software Foundation, --
18
+ -- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
19
+ -- --
20
+ -- As a special exception, if other files instantiate generics from this --
21
+ -- unit, or you link this unit with other files to produce an executable, --
22
+ -- this unit does not by itself cause the resulting executable to be --
23
+ -- covered by the GNU General Public License. This exception does not --
24
+ -- however invalidate any other reasons why the executable file might be --
25
+ -- covered by the GNU Public License. --
26
+ ------------------------------------------------------------------------------
27
+
28
+ -- $Id: zlib.ads,v 1.26 2004/09/06 06:53:19 vagul Exp $
29
+
30
+ with Ada.Streams;
31
+
32
+ with Interfaces;
33
+
34
+ package ZLib is
35
+
36
+ ZLib_Error : exception;
37
+ Status_Error : exception;
38
+
39
+ type Compression_Level is new Integer range -1 .. 9;
40
+
41
+ type Flush_Mode is private;
42
+
43
+ type Compression_Method is private;
44
+
45
+ type Window_Bits_Type is new Integer range 8 .. 15;
46
+
47
+ type Memory_Level_Type is new Integer range 1 .. 9;
48
+
49
+ type Unsigned_32 is new Interfaces.Unsigned_32;
50
+
51
+ type Strategy_Type is private;
52
+
53
+ type Header_Type is (None, Auto, Default, GZip);
54
+ -- Header type usage have a some limitation for inflate.
55
+ -- See comment for Inflate_Init.
56
+
57
+ subtype Count is Ada.Streams.Stream_Element_Count;
58
+
59
+ Default_Memory_Level : constant Memory_Level_Type := 8;
60
+ Default_Window_Bits : constant Window_Bits_Type := 15;
61
+
62
+ ----------------------------------
63
+ -- Compression method constants --
64
+ ----------------------------------
65
+
66
+ Deflated : constant Compression_Method;
67
+ -- Only one method allowed in this ZLib version
68
+
69
+ ---------------------------------
70
+ -- Compression level constants --
71
+ ---------------------------------
72
+
73
+ No_Compression : constant Compression_Level := 0;
74
+ Best_Speed : constant Compression_Level := 1;
75
+ Best_Compression : constant Compression_Level := 9;
76
+ Default_Compression : constant Compression_Level := -1;
77
+
78
+ --------------------------
79
+ -- Flush mode constants --
80
+ --------------------------
81
+
82
+ No_Flush : constant Flush_Mode;
83
+ -- Regular way for compression, no flush
84
+
85
+ Partial_Flush : constant Flush_Mode;
86
+ -- Will be removed, use Z_SYNC_FLUSH instead
87
+
88
+ Sync_Flush : constant Flush_Mode;
89
+ -- All pending output is flushed to the output buffer and the output
90
+ -- is aligned on a byte boundary, so that the decompressor can get all
91
+ -- input data available so far. (In particular avail_in is zero after the
92
+ -- call if enough output space has been provided before the call.)
93
+ -- Flushing may degrade compression for some compression algorithms and so
94
+ -- it should be used only when necessary.
95
+
96
+ Block_Flush : constant Flush_Mode;
97
+ -- Z_BLOCK requests that inflate() stop
98
+ -- if and when it get to the next deflate block boundary. When decoding the
99
+ -- zlib or gzip format, this will cause inflate() to return immediately
100
+ -- after the header and before the first block. When doing a raw inflate,
101
+ -- inflate() will go ahead and process the first block, and will return
102
+ -- when it gets to the end of that block, or when it runs out of data.
103
+
104
+ Full_Flush : constant Flush_Mode;
105
+ -- All output is flushed as with SYNC_FLUSH, and the compression state
106
+ -- is reset so that decompression can restart from this point if previous
107
+ -- compressed data has been damaged or if random access is desired. Using
108
+ -- Full_Flush too often can seriously degrade the compression.
109
+
110
+ Finish : constant Flush_Mode;
111
+ -- Just for tell the compressor that input data is complete.
112
+
113
+ ------------------------------------
114
+ -- Compression strategy constants --
115
+ ------------------------------------
116
+
117
+ -- RLE stategy could be used only in version 1.2.0 and later.
118
+
119
+ Filtered : constant Strategy_Type;
120
+ Huffman_Only : constant Strategy_Type;
121
+ RLE : constant Strategy_Type;
122
+ Default_Strategy : constant Strategy_Type;
123
+
124
+ Default_Buffer_Size : constant := 4096;
125
+
126
+ type Filter_Type is tagged limited private;
127
+ -- The filter is for compression and for decompression.
128
+ -- The usage of the type is depend of its initialization.
129
+
130
+ function Version return String;
131
+ pragma Inline (Version);
132
+ -- Return string representation of the ZLib version.
133
+
134
+ procedure Deflate_Init
135
+ (Filter : in out Filter_Type;
136
+ Level : in Compression_Level := Default_Compression;
137
+ Strategy : in Strategy_Type := Default_Strategy;
138
+ Method : in Compression_Method := Deflated;
139
+ Window_Bits : in Window_Bits_Type := Default_Window_Bits;
140
+ Memory_Level : in Memory_Level_Type := Default_Memory_Level;
141
+ Header : in Header_Type := Default);
142
+ -- Compressor initialization.
143
+ -- When Header parameter is Auto or Default, then default zlib header
144
+ -- would be provided for compressed data.
145
+ -- When Header is GZip, then gzip header would be set instead of
146
+ -- default header.
147
+ -- When Header is None, no header would be set for compressed data.
148
+
149
+ procedure Inflate_Init
150
+ (Filter : in out Filter_Type;
151
+ Window_Bits : in Window_Bits_Type := Default_Window_Bits;
152
+ Header : in Header_Type := Default);
153
+ -- Decompressor initialization.
154
+ -- Default header type mean that ZLib default header is expecting in the
155
+ -- input compressed stream.
156
+ -- Header type None mean that no header is expecting in the input stream.
157
+ -- GZip header type mean that GZip header is expecting in the
158
+ -- input compressed stream.
159
+ -- Auto header type mean that header type (GZip or Native) would be
160
+ -- detected automatically in the input stream.
161
+ -- Note that header types parameter values None, GZip and Auto are
162
+ -- supported for inflate routine only in ZLib versions 1.2.0.2 and later.
163
+ -- Deflate_Init is supporting all header types.
164
+
165
+ function Is_Open (Filter : in Filter_Type) return Boolean;
166
+ pragma Inline (Is_Open);
167
+ -- Is the filter opened for compression or decompression.
168
+
169
+ procedure Close
170
+ (Filter : in out Filter_Type;
171
+ Ignore_Error : in Boolean := False);
172
+ -- Closing the compression or decompressor.
173
+ -- If stream is closing before the complete and Ignore_Error is False,
174
+ -- The exception would be raised.
175
+
176
+ generic
177
+ with procedure Data_In
178
+ (Item : out Ada.Streams.Stream_Element_Array;
179
+ Last : out Ada.Streams.Stream_Element_Offset);
180
+ with procedure Data_Out
181
+ (Item : in Ada.Streams.Stream_Element_Array);
182
+ procedure Generic_Translate
183
+ (Filter : in out Filter_Type;
184
+ In_Buffer_Size : in Integer := Default_Buffer_Size;
185
+ Out_Buffer_Size : in Integer := Default_Buffer_Size);
186
+ -- Compress/decompress data fetch from Data_In routine and pass the result
187
+ -- to the Data_Out routine. User should provide Data_In and Data_Out
188
+ -- for compression/decompression data flow.
189
+ -- Compression or decompression depend on Filter initialization.
190
+
191
+ function Total_In (Filter : in Filter_Type) return Count;
192
+ pragma Inline (Total_In);
193
+ -- Returns total number of input bytes read so far
194
+
195
+ function Total_Out (Filter : in Filter_Type) return Count;
196
+ pragma Inline (Total_Out);
197
+ -- Returns total number of bytes output so far
198
+
199
+ function CRC32
200
+ (CRC : in Unsigned_32;
201
+ Data : in Ada.Streams.Stream_Element_Array)
202
+ return Unsigned_32;
203
+ pragma Inline (CRC32);
204
+ -- Compute CRC32, it could be necessary for make gzip format
205
+
206
+ procedure CRC32
207
+ (CRC : in out Unsigned_32;
208
+ Data : in Ada.Streams.Stream_Element_Array);
209
+ pragma Inline (CRC32);
210
+ -- Compute CRC32, it could be necessary for make gzip format
211
+
212
+ -------------------------------------------------
213
+ -- Below is more complex low level routines. --
214
+ -------------------------------------------------
215
+
216
+ procedure Translate
217
+ (Filter : in out Filter_Type;
218
+ In_Data : in Ada.Streams.Stream_Element_Array;
219
+ In_Last : out Ada.Streams.Stream_Element_Offset;
220
+ Out_Data : out Ada.Streams.Stream_Element_Array;
221
+ Out_Last : out Ada.Streams.Stream_Element_Offset;
222
+ Flush : in Flush_Mode);
223
+ -- Compress/decompress the In_Data buffer and place the result into
224
+ -- Out_Data. In_Last is the index of last element from In_Data accepted by
225
+ -- the Filter. Out_Last is the last element of the received data from
226
+ -- Filter. To tell the filter that incoming data are complete put the
227
+ -- Flush parameter to Finish.
228
+
229
+ function Stream_End (Filter : in Filter_Type) return Boolean;
230
+ pragma Inline (Stream_End);
231
+ -- Return the true when the stream is complete.
232
+
233
+ procedure Flush
234
+ (Filter : in out Filter_Type;
235
+ Out_Data : out Ada.Streams.Stream_Element_Array;
236
+ Out_Last : out Ada.Streams.Stream_Element_Offset;
237
+ Flush : in Flush_Mode);
238
+ pragma Inline (Flush);
239
+ -- Flushing the data from the compressor.
240
+
241
+ generic
242
+ with procedure Write
243
+ (Item : in Ada.Streams.Stream_Element_Array);
244
+ -- User should provide this routine for accept
245
+ -- compressed/decompressed data.
246
+
247
+ Buffer_Size : in Ada.Streams.Stream_Element_Offset
248
+ := Default_Buffer_Size;
249
+ -- Buffer size for Write user routine.
250
+
251
+ procedure Write
252
+ (Filter : in out Filter_Type;
253
+ Item : in Ada.Streams.Stream_Element_Array;
254
+ Flush : in Flush_Mode := No_Flush);
255
+ -- Compress/Decompress data from Item to the generic parameter procedure
256
+ -- Write. Output buffer size could be set in Buffer_Size generic parameter.
257
+
258
+ generic
259
+ with procedure Read
260
+ (Item : out Ada.Streams.Stream_Element_Array;
261
+ Last : out Ada.Streams.Stream_Element_Offset);
262
+ -- User should provide data for compression/decompression
263
+ -- thru this routine.
264
+
265
+ Buffer : in out Ada.Streams.Stream_Element_Array;
266
+ -- Buffer for keep remaining data from the previous
267
+ -- back read.
268
+
269
+ Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset;
270
+ -- Rest_First have to be initialized to Buffer'Last + 1
271
+ -- Rest_Last have to be initialized to Buffer'Last
272
+ -- before usage.
273
+
274
+ Allow_Read_Some : in Boolean := False;
275
+ -- Is it allowed to return Last < Item'Last before end of data.
276
+
277
+ procedure Read
278
+ (Filter : in out Filter_Type;
279
+ Item : out Ada.Streams.Stream_Element_Array;
280
+ Last : out Ada.Streams.Stream_Element_Offset;
281
+ Flush : in Flush_Mode := No_Flush);
282
+ -- Compress/Decompress data from generic parameter procedure Read to the
283
+ -- Item. User should provide Buffer and initialized Rest_First, Rest_Last
284
+ -- indicators. If Allow_Read_Some is True, Read routines could return
285
+ -- Last < Item'Last only at end of stream.
286
+
287
+ private
288
+
289
+ use Ada.Streams;
290
+
291
+ pragma Assert (Ada.Streams.Stream_Element'Size = 8);
292
+ pragma Assert (Ada.Streams.Stream_Element'Modulus = 2**8);
293
+
294
+ type Flush_Mode is new Integer range 0 .. 5;
295
+
296
+ type Compression_Method is new Integer range 8 .. 8;
297
+
298
+ type Strategy_Type is new Integer range 0 .. 3;
299
+
300
+ No_Flush : constant Flush_Mode := 0;
301
+ Partial_Flush : constant Flush_Mode := 1;
302
+ Sync_Flush : constant Flush_Mode := 2;
303
+ Full_Flush : constant Flush_Mode := 3;
304
+ Finish : constant Flush_Mode := 4;
305
+ Block_Flush : constant Flush_Mode := 5;
306
+
307
+ Filtered : constant Strategy_Type := 1;
308
+ Huffman_Only : constant Strategy_Type := 2;
309
+ RLE : constant Strategy_Type := 3;
310
+ Default_Strategy : constant Strategy_Type := 0;
311
+
312
+ Deflated : constant Compression_Method := 8;
313
+
314
+ type Z_Stream;
315
+
316
+ type Z_Stream_Access is access all Z_Stream;
317
+
318
+ type Filter_Type is tagged limited record
319
+ Strm : Z_Stream_Access;
320
+ Compression : Boolean;
321
+ Stream_End : Boolean;
322
+ Header : Header_Type;
323
+ CRC : Unsigned_32;
324
+ Offset : Stream_Element_Offset;
325
+ -- Offset for gzip header/footer output.
326
+ end record;
327
+
328
+ end ZLib;
@@ -0,0 +1,20 @@
1
+ project Zlib is
2
+
3
+ for Languages use ("Ada");
4
+ for Source_Dirs use (".");
5
+ for Object_Dir use ".";
6
+ for Main use ("test.adb", "mtest.adb", "read.adb", "buffer_demo");
7
+
8
+ package Compiler is
9
+ for Default_Switches ("ada") use ("-gnatwcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst");
10
+ end Compiler;
11
+
12
+ package Linker is
13
+ for Default_Switches ("ada") use ("-lz");
14
+ end Linker;
15
+
16
+ package Builder is
17
+ for Default_Switches ("ada") use ("-s", "-gnatQ");
18
+ end Builder;
19
+
20
+ end Zlib;
@@ -0,0 +1,43 @@
1
+ This is a patched version of zlib modified to use
2
+ Pentium-optimized assembly code in the deflation algorithm. The files
3
+ changed/added by this patch are:
4
+
5
+ README.586
6
+ match.S
7
+
8
+ The effectiveness of these modifications is a bit marginal, as the the
9
+ program's bottleneck seems to be mostly L1-cache contention, for which
10
+ there is no real way to work around without rewriting the basic
11
+ algorithm. The speedup on average is around 5-10% (which is generally
12
+ less than the amount of variance between subsequent executions).
13
+ However, when used at level 9 compression, the cache contention can
14
+ drop enough for the assembly version to achieve 10-20% speedup (and
15
+ sometimes more, depending on the amount of overall redundancy in the
16
+ files). Even here, though, cache contention can still be the limiting
17
+ factor, depending on the nature of the program using the zlib library.
18
+ This may also mean that better improvements will be seen on a Pentium
19
+ with MMX, which suffers much less from L1-cache contention, but I have
20
+ not yet verified this.
21
+
22
+ Note that this code has been tailored for the Pentium in particular,
23
+ and will not perform well on the Pentium Pro (due to the use of a
24
+ partial register in the inner loop).
25
+
26
+ If you are using an assembler other than GNU as, you will have to
27
+ translate match.S to use your assembler's syntax. (Have fun.)
28
+
29
+ Brian Raiter
30
+ breadbox@muppetlabs.com
31
+ April, 1998
32
+
33
+
34
+ Added for zlib 1.1.3:
35
+
36
+ The patches come from
37
+ http://www.muppetlabs.com/~breadbox/software/assembly.html
38
+
39
+ To compile zlib with this asm file, copy match.S to the zlib directory
40
+ then do:
41
+
42
+ CFLAGS="-O3 -DASMV" ./configure
43
+ make OBJA=match.o
@@ -0,0 +1,364 @@
1
+ /* match.s -- Pentium-optimized version of longest_match()
2
+ * Written for zlib 1.1.2
3
+ * Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
4
+ *
5
+ * This is free software; you can redistribute it and/or modify it
6
+ * under the terms of the GNU General Public License.
7
+ */
8
+
9
+ #ifndef NO_UNDERLINE
10
+ #define match_init _match_init
11
+ #define longest_match _longest_match
12
+ #endif
13
+
14
+ #define MAX_MATCH (258)
15
+ #define MIN_MATCH (3)
16
+ #define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
17
+ #define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
18
+
19
+ /* stack frame offsets */
20
+
21
+ #define wmask 0 /* local copy of s->wmask */
22
+ #define window 4 /* local copy of s->window */
23
+ #define windowbestlen 8 /* s->window + bestlen */
24
+ #define chainlenscanend 12 /* high word: current chain len */
25
+ /* low word: last bytes sought */
26
+ #define scanstart 16 /* first two bytes of string */
27
+ #define scanalign 20 /* dword-misalignment of string */
28
+ #define nicematch 24 /* a good enough match size */
29
+ #define bestlen 28 /* size of best match so far */
30
+ #define scan 32 /* ptr to string wanting match */
31
+
32
+ #define LocalVarsSize (36)
33
+ /* saved ebx 36 */
34
+ /* saved edi 40 */
35
+ /* saved esi 44 */
36
+ /* saved ebp 48 */
37
+ /* return address 52 */
38
+ #define deflatestate 56 /* the function arguments */
39
+ #define curmatch 60
40
+
41
+ /* Offsets for fields in the deflate_state structure. These numbers
42
+ * are calculated from the definition of deflate_state, with the
43
+ * assumption that the compiler will dword-align the fields. (Thus,
44
+ * changing the definition of deflate_state could easily cause this
45
+ * program to crash horribly, without so much as a warning at
46
+ * compile time. Sigh.)
47
+ */
48
+
49
+ /* All the +zlib1222add offsets are due to the addition of fields
50
+ * in zlib in the deflate_state structure since the asm code was first written
51
+ * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
52
+ * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
53
+ * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
54
+ */
55
+
56
+ #define zlib1222add (8)
57
+
58
+ #define dsWSize (36+zlib1222add)
59
+ #define dsWMask (44+zlib1222add)
60
+ #define dsWindow (48+zlib1222add)
61
+ #define dsPrev (56+zlib1222add)
62
+ #define dsMatchLen (88+zlib1222add)
63
+ #define dsPrevMatch (92+zlib1222add)
64
+ #define dsStrStart (100+zlib1222add)
65
+ #define dsMatchStart (104+zlib1222add)
66
+ #define dsLookahead (108+zlib1222add)
67
+ #define dsPrevLen (112+zlib1222add)
68
+ #define dsMaxChainLen (116+zlib1222add)
69
+ #define dsGoodMatch (132+zlib1222add)
70
+ #define dsNiceMatch (136+zlib1222add)
71
+
72
+
73
+ .file "match.S"
74
+
75
+ .globl match_init, longest_match
76
+
77
+ .text
78
+
79
+ /* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
80
+
81
+ longest_match:
82
+
83
+ /* Save registers that the compiler may be using, and adjust %esp to */
84
+ /* make room for our stack frame. */
85
+
86
+ pushl %ebp
87
+ pushl %edi
88
+ pushl %esi
89
+ pushl %ebx
90
+ subl $LocalVarsSize, %esp
91
+
92
+ /* Retrieve the function arguments. %ecx will hold cur_match */
93
+ /* throughout the entire function. %edx will hold the pointer to the */
94
+ /* deflate_state structure during the function's setup (before */
95
+ /* entering the main loop). */
96
+
97
+ movl deflatestate(%esp), %edx
98
+ movl curmatch(%esp), %ecx
99
+
100
+ /* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
101
+
102
+ movl dsNiceMatch(%edx), %eax
103
+ movl dsLookahead(%edx), %ebx
104
+ cmpl %eax, %ebx
105
+ jl LookaheadLess
106
+ movl %eax, %ebx
107
+ LookaheadLess: movl %ebx, nicematch(%esp)
108
+
109
+ /* register Bytef *scan = s->window + s->strstart; */
110
+
111
+ movl dsWindow(%edx), %esi
112
+ movl %esi, window(%esp)
113
+ movl dsStrStart(%edx), %ebp
114
+ lea (%esi,%ebp), %edi
115
+ movl %edi, scan(%esp)
116
+
117
+ /* Determine how many bytes the scan ptr is off from being */
118
+ /* dword-aligned. */
119
+
120
+ movl %edi, %eax
121
+ negl %eax
122
+ andl $3, %eax
123
+ movl %eax, scanalign(%esp)
124
+
125
+ /* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
126
+ /* s->strstart - (IPos)MAX_DIST(s) : NIL; */
127
+
128
+ movl dsWSize(%edx), %eax
129
+ subl $MIN_LOOKAHEAD, %eax
130
+ subl %eax, %ebp
131
+ jg LimitPositive
132
+ xorl %ebp, %ebp
133
+ LimitPositive:
134
+
135
+ /* unsigned chain_length = s->max_chain_length; */
136
+ /* if (s->prev_length >= s->good_match) { */
137
+ /* chain_length >>= 2; */
138
+ /* } */
139
+
140
+ movl dsPrevLen(%edx), %eax
141
+ movl dsGoodMatch(%edx), %ebx
142
+ cmpl %ebx, %eax
143
+ movl dsMaxChainLen(%edx), %ebx
144
+ jl LastMatchGood
145
+ shrl $2, %ebx
146
+ LastMatchGood:
147
+
148
+ /* chainlen is decremented once beforehand so that the function can */
149
+ /* use the sign flag instead of the zero flag for the exit test. */
150
+ /* It is then shifted into the high word, to make room for the scanend */
151
+ /* scanend value, which it will always accompany. */
152
+
153
+ decl %ebx
154
+ shll $16, %ebx
155
+
156
+ /* int best_len = s->prev_length; */
157
+
158
+ movl dsPrevLen(%edx), %eax
159
+ movl %eax, bestlen(%esp)
160
+
161
+ /* Store the sum of s->window + best_len in %esi locally, and in %esi. */
162
+
163
+ addl %eax, %esi
164
+ movl %esi, windowbestlen(%esp)
165
+
166
+ /* register ush scan_start = *(ushf*)scan; */
167
+ /* register ush scan_end = *(ushf*)(scan+best_len-1); */
168
+
169
+ movw (%edi), %bx
170
+ movw %bx, scanstart(%esp)
171
+ movw -1(%edi,%eax), %bx
172
+ movl %ebx, chainlenscanend(%esp)
173
+
174
+ /* Posf *prev = s->prev; */
175
+ /* uInt wmask = s->w_mask; */
176
+
177
+ movl dsPrev(%edx), %edi
178
+ movl dsWMask(%edx), %edx
179
+ mov %edx, wmask(%esp)
180
+
181
+ /* Jump into the main loop. */
182
+
183
+ jmp LoopEntry
184
+
185
+ .balign 16
186
+
187
+ /* do {
188
+ * match = s->window + cur_match;
189
+ * if (*(ushf*)(match+best_len-1) != scan_end ||
190
+ * *(ushf*)match != scan_start) continue;
191
+ * [...]
192
+ * } while ((cur_match = prev[cur_match & wmask]) > limit
193
+ * && --chain_length != 0);
194
+ *
195
+ * Here is the inner loop of the function. The function will spend the
196
+ * majority of its time in this loop, and majority of that time will
197
+ * be spent in the first ten instructions.
198
+ *
199
+ * Within this loop:
200
+ * %ebx = chainlenscanend - i.e., ((chainlen << 16) | scanend)
201
+ * %ecx = curmatch
202
+ * %edx = curmatch & wmask
203
+ * %esi = windowbestlen - i.e., (window + bestlen)
204
+ * %edi = prev
205
+ * %ebp = limit
206
+ *
207
+ * Two optimization notes on the choice of instructions:
208
+ *
209
+ * The first instruction uses a 16-bit address, which costs an extra,
210
+ * unpairable cycle. This is cheaper than doing a 32-bit access and
211
+ * zeroing the high word, due to the 3-cycle misalignment penalty which
212
+ * would occur half the time. This also turns out to be cheaper than
213
+ * doing two separate 8-bit accesses, as the memory is so rarely in the
214
+ * L1 cache.
215
+ *
216
+ * The window buffer, however, apparently spends a lot of time in the
217
+ * cache, and so it is faster to retrieve the word at the end of the
218
+ * match string with two 8-bit loads. The instructions that test the
219
+ * word at the beginning of the match string, however, are executed
220
+ * much less frequently, and there it was cheaper to use 16-bit
221
+ * instructions, which avoided the necessity of saving off and
222
+ * subsequently reloading one of the other registers.
223
+ */
224
+ LookupLoop:
225
+ /* 1 U & V */
226
+ movw (%edi,%edx,2), %cx /* 2 U pipe */
227
+ movl wmask(%esp), %edx /* 2 V pipe */
228
+ cmpl %ebp, %ecx /* 3 U pipe */
229
+ jbe LeaveNow /* 3 V pipe */
230
+ subl $0x00010000, %ebx /* 4 U pipe */
231
+ js LeaveNow /* 4 V pipe */
232
+ LoopEntry: movb -1(%esi,%ecx), %al /* 5 U pipe */
233
+ andl %ecx, %edx /* 5 V pipe */
234
+ cmpb %bl, %al /* 6 U pipe */
235
+ jnz LookupLoop /* 6 V pipe */
236
+ movb (%esi,%ecx), %ah
237
+ cmpb %bh, %ah
238
+ jnz LookupLoop
239
+ movl window(%esp), %eax
240
+ movw (%eax,%ecx), %ax
241
+ cmpw scanstart(%esp), %ax
242
+ jnz LookupLoop
243
+
244
+ /* Store the current value of chainlen. */
245
+
246
+ movl %ebx, chainlenscanend(%esp)
247
+
248
+ /* Point %edi to the string under scrutiny, and %esi to the string we */
249
+ /* are hoping to match it up with. In actuality, %esi and %edi are */
250
+ /* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
251
+ /* initialized to -(MAX_MATCH_8 - scanalign). */
252
+
253
+ movl window(%esp), %esi
254
+ movl scan(%esp), %edi
255
+ addl %ecx, %esi
256
+ movl scanalign(%esp), %eax
257
+ movl $(-MAX_MATCH_8), %edx
258
+ lea MAX_MATCH_8(%edi,%eax), %edi
259
+ lea MAX_MATCH_8(%esi,%eax), %esi
260
+
261
+ /* Test the strings for equality, 8 bytes at a time. At the end,
262
+ * adjust %edx so that it is offset to the exact byte that mismatched.
263
+ *
264
+ * We already know at this point that the first three bytes of the
265
+ * strings match each other, and they can be safely passed over before
266
+ * starting the compare loop. So what this code does is skip over 0-3
267
+ * bytes, as much as necessary in order to dword-align the %edi
268
+ * pointer. (%esi will still be misaligned three times out of four.)
269
+ *
270
+ * It should be confessed that this loop usually does not represent
271
+ * much of the total running time. Replacing it with a more
272
+ * straightforward "rep cmpsb" would not drastically degrade
273
+ * performance.
274
+ */
275
+ LoopCmps:
276
+ movl (%esi,%edx), %eax
277
+ movl (%edi,%edx), %ebx
278
+ xorl %ebx, %eax
279
+ jnz LeaveLoopCmps
280
+ movl 4(%esi,%edx), %eax
281
+ movl 4(%edi,%edx), %ebx
282
+ xorl %ebx, %eax
283
+ jnz LeaveLoopCmps4
284
+ addl $8, %edx
285
+ jnz LoopCmps
286
+ jmp LenMaximum
287
+ LeaveLoopCmps4: addl $4, %edx
288
+ LeaveLoopCmps: testl $0x0000FFFF, %eax
289
+ jnz LenLower
290
+ addl $2, %edx
291
+ shrl $16, %eax
292
+ LenLower: subb $1, %al
293
+ adcl $0, %edx
294
+
295
+ /* Calculate the length of the match. If it is longer than MAX_MATCH, */
296
+ /* then automatically accept it as the best possible match and leave. */
297
+
298
+ lea (%edi,%edx), %eax
299
+ movl scan(%esp), %edi
300
+ subl %edi, %eax
301
+ cmpl $MAX_MATCH, %eax
302
+ jge LenMaximum
303
+
304
+ /* If the length of the match is not longer than the best match we */
305
+ /* have so far, then forget it and return to the lookup loop. */
306
+
307
+ movl deflatestate(%esp), %edx
308
+ movl bestlen(%esp), %ebx
309
+ cmpl %ebx, %eax
310
+ jg LongerMatch
311
+ movl chainlenscanend(%esp), %ebx
312
+ movl windowbestlen(%esp), %esi
313
+ movl dsPrev(%edx), %edi
314
+ movl wmask(%esp), %edx
315
+ andl %ecx, %edx
316
+ jmp LookupLoop
317
+
318
+ /* s->match_start = cur_match; */
319
+ /* best_len = len; */
320
+ /* if (len >= nice_match) break; */
321
+ /* scan_end = *(ushf*)(scan+best_len-1); */
322
+
323
+ LongerMatch: movl nicematch(%esp), %ebx
324
+ movl %eax, bestlen(%esp)
325
+ movl %ecx, dsMatchStart(%edx)
326
+ cmpl %ebx, %eax
327
+ jge LeaveNow
328
+ movl window(%esp), %esi
329
+ addl %eax, %esi
330
+ movl %esi, windowbestlen(%esp)
331
+ movl chainlenscanend(%esp), %ebx
332
+ movw -1(%edi,%eax), %bx
333
+ movl dsPrev(%edx), %edi
334
+ movl %ebx, chainlenscanend(%esp)
335
+ movl wmask(%esp), %edx
336
+ andl %ecx, %edx
337
+ jmp LookupLoop
338
+
339
+ /* Accept the current string, with the maximum possible length. */
340
+
341
+ LenMaximum: movl deflatestate(%esp), %edx
342
+ movl $MAX_MATCH, bestlen(%esp)
343
+ movl %ecx, dsMatchStart(%edx)
344
+
345
+ /* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
346
+ /* return s->lookahead; */
347
+
348
+ LeaveNow:
349
+ movl deflatestate(%esp), %edx
350
+ movl bestlen(%esp), %ebx
351
+ movl dsLookahead(%edx), %eax
352
+ cmpl %eax, %ebx
353
+ jg LookaheadRet
354
+ movl %ebx, %eax
355
+ LookaheadRet:
356
+
357
+ /* Restore the stack and return from whence we came. */
358
+
359
+ addl $LocalVarsSize, %esp
360
+ popl %ebx
361
+ popl %esi
362
+ popl %edi
363
+ popl %ebp
364
+ match_init: ret