finishm 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,307 @@
1
+ /*
2
+ *
3
+ * Copyright (c) 1997
4
+ * Christian Michelsen Research AS
5
+ * Advanced Computing
6
+ * Fantoftvegen 38, 5036 BERGEN, Norway
7
+ * http://www.cmr.no
8
+ *
9
+ * Permission to use, copy, modify, distribute and sell this software
10
+ * and its documentation for any purpose is hereby granted without fee,
11
+ * provided that the above copyright notice appear in all copies and
12
+ * that both that copyright notice and this permission notice appear
13
+ * in supporting documentation. Christian Michelsen Research AS makes no
14
+ * representations about the suitability of this software for any
15
+ * purpose. It is provided "as is" without express or implied warranty.
16
+ *
17
+ */
18
+
19
+ #ifndef ZSTREAM__H
20
+ #define ZSTREAM__H
21
+
22
+ /*
23
+ * zstream.h - C++ interface to the 'zlib' general purpose compression library
24
+ * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $
25
+ */
26
+
27
+ #include <strstream.h>
28
+ #include <string.h>
29
+ #include <stdio.h>
30
+ #include "zlib.h"
31
+
32
+ #if defined(_WIN32)
33
+ # include <fcntl.h>
34
+ # include <io.h>
35
+ # define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
36
+ #else
37
+ # define SET_BINARY_MODE(file)
38
+ #endif
39
+
40
+ class zstringlen {
41
+ public:
42
+ zstringlen(class izstream&);
43
+ zstringlen(class ozstream&, const char*);
44
+ size_t value() const { return val.word; }
45
+ private:
46
+ struct Val { unsigned char byte; size_t word; } val;
47
+ };
48
+
49
+ // ----------------------------- izstream -----------------------------
50
+
51
+ class izstream
52
+ {
53
+ public:
54
+ izstream() : m_fp(0) {}
55
+ izstream(FILE* fp) : m_fp(0) { open(fp); }
56
+ izstream(const char* name) : m_fp(0) { open(name); }
57
+ ~izstream() { close(); }
58
+
59
+ /* Opens a gzip (.gz) file for reading.
60
+ * open() can be used to read a file which is not in gzip format;
61
+ * in this case read() will directly read from the file without
62
+ * decompression. errno can be checked to distinguish two error
63
+ * cases (if errno is zero, the zlib error is Z_MEM_ERROR).
64
+ */
65
+ void open(const char* name) {
66
+ if (m_fp) close();
67
+ m_fp = ::gzopen(name, "rb");
68
+ }
69
+
70
+ void open(FILE* fp) {
71
+ SET_BINARY_MODE(fp);
72
+ if (m_fp) close();
73
+ m_fp = ::gzdopen(fileno(fp), "rb");
74
+ }
75
+
76
+ /* Flushes all pending input if necessary, closes the compressed file
77
+ * and deallocates all the (de)compression state. The return value is
78
+ * the zlib error number (see function error() below).
79
+ */
80
+ int close() {
81
+ int r = ::gzclose(m_fp);
82
+ m_fp = 0; return r;
83
+ }
84
+
85
+ /* Binary read the given number of bytes from the compressed file.
86
+ */
87
+ int read(void* buf, size_t len) {
88
+ return ::gzread(m_fp, buf, len);
89
+ }
90
+
91
+ /* Returns the error message for the last error which occurred on the
92
+ * given compressed file. errnum is set to zlib error number. If an
93
+ * error occurred in the file system and not in the compression library,
94
+ * errnum is set to Z_ERRNO and the application may consult errno
95
+ * to get the exact error code.
96
+ */
97
+ const char* error(int* errnum) {
98
+ return ::gzerror(m_fp, errnum);
99
+ }
100
+
101
+ gzFile fp() { return m_fp; }
102
+
103
+ private:
104
+ gzFile m_fp;
105
+ };
106
+
107
+ /*
108
+ * Binary read the given (array of) object(s) from the compressed file.
109
+ * If the input file was not in gzip format, read() copies the objects number
110
+ * of bytes into the buffer.
111
+ * returns the number of uncompressed bytes actually read
112
+ * (0 for end of file, -1 for error).
113
+ */
114
+ template <class T, class Items>
115
+ inline int read(izstream& zs, T* x, Items items) {
116
+ return ::gzread(zs.fp(), x, items*sizeof(T));
117
+ }
118
+
119
+ /*
120
+ * Binary input with the '>' operator.
121
+ */
122
+ template <class T>
123
+ inline izstream& operator>(izstream& zs, T& x) {
124
+ ::gzread(zs.fp(), &x, sizeof(T));
125
+ return zs;
126
+ }
127
+
128
+
129
+ inline zstringlen::zstringlen(izstream& zs) {
130
+ zs > val.byte;
131
+ if (val.byte == 255) zs > val.word;
132
+ else val.word = val.byte;
133
+ }
134
+
135
+ /*
136
+ * Read length of string + the string with the '>' operator.
137
+ */
138
+ inline izstream& operator>(izstream& zs, char* x) {
139
+ zstringlen len(zs);
140
+ ::gzread(zs.fp(), x, len.value());
141
+ x[len.value()] = '\0';
142
+ return zs;
143
+ }
144
+
145
+ inline char* read_string(izstream& zs) {
146
+ zstringlen len(zs);
147
+ char* x = new char[len.value()+1];
148
+ ::gzread(zs.fp(), x, len.value());
149
+ x[len.value()] = '\0';
150
+ return x;
151
+ }
152
+
153
+ // ----------------------------- ozstream -----------------------------
154
+
155
+ class ozstream
156
+ {
157
+ public:
158
+ ozstream() : m_fp(0), m_os(0) {
159
+ }
160
+ ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION)
161
+ : m_fp(0), m_os(0) {
162
+ open(fp, level);
163
+ }
164
+ ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION)
165
+ : m_fp(0), m_os(0) {
166
+ open(name, level);
167
+ }
168
+ ~ozstream() {
169
+ close();
170
+ }
171
+
172
+ /* Opens a gzip (.gz) file for writing.
173
+ * The compression level parameter should be in 0..9
174
+ * errno can be checked to distinguish two error cases
175
+ * (if errno is zero, the zlib error is Z_MEM_ERROR).
176
+ */
177
+ void open(const char* name, int level = Z_DEFAULT_COMPRESSION) {
178
+ char mode[4] = "wb\0";
179
+ if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
180
+ if (m_fp) close();
181
+ m_fp = ::gzopen(name, mode);
182
+ }
183
+
184
+ /* open from a FILE pointer.
185
+ */
186
+ void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) {
187
+ SET_BINARY_MODE(fp);
188
+ char mode[4] = "wb\0";
189
+ if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
190
+ if (m_fp) close();
191
+ m_fp = ::gzdopen(fileno(fp), mode);
192
+ }
193
+
194
+ /* Flushes all pending output if necessary, closes the compressed file
195
+ * and deallocates all the (de)compression state. The return value is
196
+ * the zlib error number (see function error() below).
197
+ */
198
+ int close() {
199
+ if (m_os) {
200
+ ::gzwrite(m_fp, m_os->str(), m_os->pcount());
201
+ delete[] m_os->str(); delete m_os; m_os = 0;
202
+ }
203
+ int r = ::gzclose(m_fp); m_fp = 0; return r;
204
+ }
205
+
206
+ /* Binary write the given number of bytes into the compressed file.
207
+ */
208
+ int write(const void* buf, size_t len) {
209
+ return ::gzwrite(m_fp, (voidp) buf, len);
210
+ }
211
+
212
+ /* Flushes all pending output into the compressed file. The parameter
213
+ * _flush is as in the deflate() function. The return value is the zlib
214
+ * error number (see function gzerror below). flush() returns Z_OK if
215
+ * the flush_ parameter is Z_FINISH and all output could be flushed.
216
+ * flush() should be called only when strictly necessary because it can
217
+ * degrade compression.
218
+ */
219
+ int flush(int _flush) {
220
+ os_flush();
221
+ return ::gzflush(m_fp, _flush);
222
+ }
223
+
224
+ /* Returns the error message for the last error which occurred on the
225
+ * given compressed file. errnum is set to zlib error number. If an
226
+ * error occurred in the file system and not in the compression library,
227
+ * errnum is set to Z_ERRNO and the application may consult errno
228
+ * to get the exact error code.
229
+ */
230
+ const char* error(int* errnum) {
231
+ return ::gzerror(m_fp, errnum);
232
+ }
233
+
234
+ gzFile fp() { return m_fp; }
235
+
236
+ ostream& os() {
237
+ if (m_os == 0) m_os = new ostrstream;
238
+ return *m_os;
239
+ }
240
+
241
+ void os_flush() {
242
+ if (m_os && m_os->pcount()>0) {
243
+ ostrstream* oss = new ostrstream;
244
+ oss->fill(m_os->fill());
245
+ oss->flags(m_os->flags());
246
+ oss->precision(m_os->precision());
247
+ oss->width(m_os->width());
248
+ ::gzwrite(m_fp, m_os->str(), m_os->pcount());
249
+ delete[] m_os->str(); delete m_os; m_os = oss;
250
+ }
251
+ }
252
+
253
+ private:
254
+ gzFile m_fp;
255
+ ostrstream* m_os;
256
+ };
257
+
258
+ /*
259
+ * Binary write the given (array of) object(s) into the compressed file.
260
+ * returns the number of uncompressed bytes actually written
261
+ * (0 in case of error).
262
+ */
263
+ template <class T, class Items>
264
+ inline int write(ozstream& zs, const T* x, Items items) {
265
+ return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T));
266
+ }
267
+
268
+ /*
269
+ * Binary output with the '<' operator.
270
+ */
271
+ template <class T>
272
+ inline ozstream& operator<(ozstream& zs, const T& x) {
273
+ ::gzwrite(zs.fp(), (voidp) &x, sizeof(T));
274
+ return zs;
275
+ }
276
+
277
+ inline zstringlen::zstringlen(ozstream& zs, const char* x) {
278
+ val.byte = 255; val.word = ::strlen(x);
279
+ if (val.word < 255) zs < (val.byte = val.word);
280
+ else zs < val;
281
+ }
282
+
283
+ /*
284
+ * Write length of string + the string with the '<' operator.
285
+ */
286
+ inline ozstream& operator<(ozstream& zs, const char* x) {
287
+ zstringlen len(zs, x);
288
+ ::gzwrite(zs.fp(), (voidp) x, len.value());
289
+ return zs;
290
+ }
291
+
292
+ #ifdef _MSC_VER
293
+ inline ozstream& operator<(ozstream& zs, char* const& x) {
294
+ return zs < (const char*) x;
295
+ }
296
+ #endif
297
+
298
+ /*
299
+ * Ascii write with the << operator;
300
+ */
301
+ template <class T>
302
+ inline ostream& operator<<(ozstream& zs, const T& x) {
303
+ zs.os_flush();
304
+ return zs.os() << x;
305
+ }
306
+
307
+ #endif
@@ -0,0 +1,25 @@
1
+ #include "zstream.h"
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <iomanip.h>
5
+
6
+ void main() {
7
+ char h[256] = "Hello";
8
+ char* g = "Goodbye";
9
+ ozstream out("temp.gz");
10
+ out < "This works well" < h < g;
11
+ out.close();
12
+
13
+ izstream in("temp.gz"); // read it back
14
+ char *x = read_string(in), *y = new char[256], z[256];
15
+ in > y > z;
16
+ in.close();
17
+ cout << x << endl << y << endl << z << endl;
18
+
19
+ out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results
20
+ out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl;
21
+ out << z << endl << y << endl << x << endl;
22
+ out << 1.1234567890123456789 << endl;
23
+
24
+ delete[] x; delete[] y;
25
+ }
@@ -0,0 +1,35 @@
1
+ These classes provide a C++ stream interface to the zlib library. It allows you
2
+ to do things like:
3
+
4
+ gzofstream outf("blah.gz");
5
+ outf << "These go into the gzip file " << 123 << endl;
6
+
7
+ It does this by deriving a specialized stream buffer for gzipped files, which is
8
+ the way Stroustrup would have done it. :->
9
+
10
+ The gzifstream and gzofstream classes were originally written by Kevin Ruland
11
+ and made available in the zlib contrib/iostream directory. The older version still
12
+ compiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of
13
+ this version.
14
+
15
+ The new classes are as standard-compliant as possible, closely following the
16
+ approach of the standard library's fstream classes. It compiles under gcc versions
17
+ 3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard
18
+ library naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs
19
+ from the previous one in the following respects:
20
+ - added showmanyc
21
+ - added setbuf, with support for unbuffered output via setbuf(0,0)
22
+ - a few bug fixes of stream behavior
23
+ - gzipped output file opened with default compression level instead of maximum level
24
+ - setcompressionlevel()/strategy() members replaced by single setcompression()
25
+
26
+ The code is provided "as is", with the permission to use, copy, modify, distribute
27
+ and sell it for any purpose without fee.
28
+
29
+ Ludwig Schwardt
30
+ <schwardt@sun.ac.za>
31
+
32
+ DSP Lab
33
+ Electrical & Electronic Engineering Department
34
+ University of Stellenbosch
35
+ South Africa
@@ -0,0 +1,17 @@
1
+ Possible upgrades to gzfilebuf:
2
+
3
+ - The ability to do putback (e.g. putbackfail)
4
+
5
+ - The ability to seek (zlib supports this, but could be slow/tricky)
6
+
7
+ - Simultaneous read/write access (does it make sense?)
8
+
9
+ - Support for ios_base::ate open mode
10
+
11
+ - Locale support?
12
+
13
+ - Check public interface to see which calls give problems
14
+ (due to dependence on library internals)
15
+
16
+ - Override operator<<(ostream&, gzfilebuf*) to allow direct copying
17
+ of stream buffer to stream ( i.e. os << is.rdbuf(); )
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Test program for gzifstream and gzofstream
3
+ *
4
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
5
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
6
+ */
7
+
8
+ #include "zfstream.h"
9
+ #include <iostream> // for cout
10
+
11
+ int main() {
12
+
13
+ gzofstream outf;
14
+ gzifstream inf;
15
+ char buf[80];
16
+
17
+ outf.open("test1.txt.gz");
18
+ outf << "The quick brown fox sidestepped the lazy canine\n"
19
+ << 1.3 << "\nPlan " << 9 << std::endl;
20
+ outf.close();
21
+ std::cout << "Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\n"
22
+ << "The quick brown fox sidestepped the lazy canine\n"
23
+ << 1.3 << "\nPlan " << 9 << std::endl;
24
+
25
+ std::cout << "\nReading 'test1.txt.gz' (buffered) produces:\n";
26
+ inf.open("test1.txt.gz");
27
+ while (inf.getline(buf,80,'\n')) {
28
+ std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
29
+ }
30
+ inf.close();
31
+
32
+ outf.rdbuf()->pubsetbuf(0,0);
33
+ outf.open("test2.txt.gz");
34
+ outf << setcompression(Z_NO_COMPRESSION)
35
+ << "The quick brown fox sidestepped the lazy canine\n"
36
+ << 1.3 << "\nPlan " << 9 << std::endl;
37
+ outf.close();
38
+ std::cout << "\nWrote the same message to 'test2.txt.gz' in uncompressed form";
39
+
40
+ std::cout << "\nReading 'test2.txt.gz' (unbuffered) produces:\n";
41
+ inf.rdbuf()->pubsetbuf(0,0);
42
+ inf.open("test2.txt.gz");
43
+ while (inf.getline(buf,80,'\n')) {
44
+ std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
45
+ }
46
+ inf.close();
47
+
48
+ return 0;
49
+
50
+ }
@@ -0,0 +1,479 @@
1
+ /*
2
+ * A C++ I/O streams interface to the zlib gz* functions
3
+ *
4
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
5
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
6
+ *
7
+ * This version is standard-compliant and compatible with gcc 3.x.
8
+ */
9
+
10
+ #include "zfstream.h"
11
+ #include <cstring> // for strcpy, strcat, strlen (mode strings)
12
+ #include <cstdio> // for BUFSIZ
13
+
14
+ // Internal buffer sizes (default and "unbuffered" versions)
15
+ #define BIGBUFSIZE BUFSIZ
16
+ #define SMALLBUFSIZE 1
17
+
18
+ /*****************************************************************************/
19
+
20
+ // Default constructor
21
+ gzfilebuf::gzfilebuf()
22
+ : file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false),
23
+ buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true)
24
+ {
25
+ // No buffers to start with
26
+ this->disable_buffer();
27
+ }
28
+
29
+ // Destructor
30
+ gzfilebuf::~gzfilebuf()
31
+ {
32
+ // Sync output buffer and close only if responsible for file
33
+ // (i.e. attached streams should be left open at this stage)
34
+ this->sync();
35
+ if (own_fd)
36
+ this->close();
37
+ // Make sure internal buffer is deallocated
38
+ this->disable_buffer();
39
+ }
40
+
41
+ // Set compression level and strategy
42
+ int
43
+ gzfilebuf::setcompression(int comp_level,
44
+ int comp_strategy)
45
+ {
46
+ return gzsetparams(file, comp_level, comp_strategy);
47
+ }
48
+
49
+ // Open gzipped file
50
+ gzfilebuf*
51
+ gzfilebuf::open(const char *name,
52
+ std::ios_base::openmode mode)
53
+ {
54
+ // Fail if file already open
55
+ if (this->is_open())
56
+ return NULL;
57
+ // Don't support simultaneous read/write access (yet)
58
+ if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
59
+ return NULL;
60
+
61
+ // Build mode string for gzopen and check it [27.8.1.3.2]
62
+ char char_mode[6] = "\0\0\0\0\0";
63
+ if (!this->open_mode(mode, char_mode))
64
+ return NULL;
65
+
66
+ // Attempt to open file
67
+ if ((file = gzopen(name, char_mode)) == NULL)
68
+ return NULL;
69
+
70
+ // On success, allocate internal buffer and set flags
71
+ this->enable_buffer();
72
+ io_mode = mode;
73
+ own_fd = true;
74
+ return this;
75
+ }
76
+
77
+ // Attach to gzipped file
78
+ gzfilebuf*
79
+ gzfilebuf::attach(int fd,
80
+ std::ios_base::openmode mode)
81
+ {
82
+ // Fail if file already open
83
+ if (this->is_open())
84
+ return NULL;
85
+ // Don't support simultaneous read/write access (yet)
86
+ if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
87
+ return NULL;
88
+
89
+ // Build mode string for gzdopen and check it [27.8.1.3.2]
90
+ char char_mode[6] = "\0\0\0\0\0";
91
+ if (!this->open_mode(mode, char_mode))
92
+ return NULL;
93
+
94
+ // Attempt to attach to file
95
+ if ((file = gzdopen(fd, char_mode)) == NULL)
96
+ return NULL;
97
+
98
+ // On success, allocate internal buffer and set flags
99
+ this->enable_buffer();
100
+ io_mode = mode;
101
+ own_fd = false;
102
+ return this;
103
+ }
104
+
105
+ // Close gzipped file
106
+ gzfilebuf*
107
+ gzfilebuf::close()
108
+ {
109
+ // Fail immediately if no file is open
110
+ if (!this->is_open())
111
+ return NULL;
112
+ // Assume success
113
+ gzfilebuf* retval = this;
114
+ // Attempt to sync and close gzipped file
115
+ if (this->sync() == -1)
116
+ retval = NULL;
117
+ if (gzclose(file) < 0)
118
+ retval = NULL;
119
+ // File is now gone anyway (postcondition [27.8.1.3.8])
120
+ file = NULL;
121
+ own_fd = false;
122
+ // Destroy internal buffer if it exists
123
+ this->disable_buffer();
124
+ return retval;
125
+ }
126
+
127
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
128
+
129
+ // Convert int open mode to mode string
130
+ bool
131
+ gzfilebuf::open_mode(std::ios_base::openmode mode,
132
+ char* c_mode) const
133
+ {
134
+ bool testb = mode & std::ios_base::binary;
135
+ bool testi = mode & std::ios_base::in;
136
+ bool testo = mode & std::ios_base::out;
137
+ bool testt = mode & std::ios_base::trunc;
138
+ bool testa = mode & std::ios_base::app;
139
+
140
+ // Check for valid flag combinations - see [27.8.1.3.2] (Table 92)
141
+ // Original zfstream hardcoded the compression level to maximum here...
142
+ // Double the time for less than 1% size improvement seems
143
+ // excessive though - keeping it at the default level
144
+ // To change back, just append "9" to the next three mode strings
145
+ if (!testi && testo && !testt && !testa)
146
+ strcpy(c_mode, "w");
147
+ if (!testi && testo && !testt && testa)
148
+ strcpy(c_mode, "a");
149
+ if (!testi && testo && testt && !testa)
150
+ strcpy(c_mode, "w");
151
+ if (testi && !testo && !testt && !testa)
152
+ strcpy(c_mode, "r");
153
+ // No read/write mode yet
154
+ // if (testi && testo && !testt && !testa)
155
+ // strcpy(c_mode, "r+");
156
+ // if (testi && testo && testt && !testa)
157
+ // strcpy(c_mode, "w+");
158
+
159
+ // Mode string should be empty for invalid combination of flags
160
+ if (strlen(c_mode) == 0)
161
+ return false;
162
+ if (testb)
163
+ strcat(c_mode, "b");
164
+ return true;
165
+ }
166
+
167
+ // Determine number of characters in internal get buffer
168
+ std::streamsize
169
+ gzfilebuf::showmanyc()
170
+ {
171
+ // Calls to underflow will fail if file not opened for reading
172
+ if (!this->is_open() || !(io_mode & std::ios_base::in))
173
+ return -1;
174
+ // Make sure get area is in use
175
+ if (this->gptr() && (this->gptr() < this->egptr()))
176
+ return std::streamsize(this->egptr() - this->gptr());
177
+ else
178
+ return 0;
179
+ }
180
+
181
+ // Fill get area from gzipped file
182
+ gzfilebuf::int_type
183
+ gzfilebuf::underflow()
184
+ {
185
+ // If something is left in the get area by chance, return it
186
+ // (this shouldn't normally happen, as underflow is only supposed
187
+ // to be called when gptr >= egptr, but it serves as error check)
188
+ if (this->gptr() && (this->gptr() < this->egptr()))
189
+ return traits_type::to_int_type(*(this->gptr()));
190
+
191
+ // If the file hasn't been opened for reading, produce error
192
+ if (!this->is_open() || !(io_mode & std::ios_base::in))
193
+ return traits_type::eof();
194
+
195
+ // Attempt to fill internal buffer from gzipped file
196
+ // (buffer must be guaranteed to exist...)
197
+ int bytes_read = gzread(file, buffer, buffer_size);
198
+ // Indicates error or EOF
199
+ if (bytes_read <= 0)
200
+ {
201
+ // Reset get area
202
+ this->setg(buffer, buffer, buffer);
203
+ return traits_type::eof();
204
+ }
205
+ // Make all bytes read from file available as get area
206
+ this->setg(buffer, buffer, buffer + bytes_read);
207
+
208
+ // Return next character in get area
209
+ return traits_type::to_int_type(*(this->gptr()));
210
+ }
211
+
212
+ // Write put area to gzipped file
213
+ gzfilebuf::int_type
214
+ gzfilebuf::overflow(int_type c)
215
+ {
216
+ // Determine whether put area is in use
217
+ if (this->pbase())
218
+ {
219
+ // Double-check pointer range
220
+ if (this->pptr() > this->epptr() || this->pptr() < this->pbase())
221
+ return traits_type::eof();
222
+ // Add extra character to buffer if not EOF
223
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
224
+ {
225
+ *(this->pptr()) = traits_type::to_char_type(c);
226
+ this->pbump(1);
227
+ }
228
+ // Number of characters to write to file
229
+ int bytes_to_write = this->pptr() - this->pbase();
230
+ // Overflow doesn't fail if nothing is to be written
231
+ if (bytes_to_write > 0)
232
+ {
233
+ // If the file hasn't been opened for writing, produce error
234
+ if (!this->is_open() || !(io_mode & std::ios_base::out))
235
+ return traits_type::eof();
236
+ // If gzipped file won't accept all bytes written to it, fail
237
+ if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write)
238
+ return traits_type::eof();
239
+ // Reset next pointer to point to pbase on success
240
+ this->pbump(-bytes_to_write);
241
+ }
242
+ }
243
+ // Write extra character to file if not EOF
244
+ else if (!traits_type::eq_int_type(c, traits_type::eof()))
245
+ {
246
+ // If the file hasn't been opened for writing, produce error
247
+ if (!this->is_open() || !(io_mode & std::ios_base::out))
248
+ return traits_type::eof();
249
+ // Impromptu char buffer (allows "unbuffered" output)
250
+ char_type last_char = traits_type::to_char_type(c);
251
+ // If gzipped file won't accept this character, fail
252
+ if (gzwrite(file, &last_char, 1) != 1)
253
+ return traits_type::eof();
254
+ }
255
+
256
+ // If you got here, you have succeeded (even if c was EOF)
257
+ // The return value should therefore be non-EOF
258
+ if (traits_type::eq_int_type(c, traits_type::eof()))
259
+ return traits_type::not_eof(c);
260
+ else
261
+ return c;
262
+ }
263
+
264
+ // Assign new buffer
265
+ std::streambuf*
266
+ gzfilebuf::setbuf(char_type* p,
267
+ std::streamsize n)
268
+ {
269
+ // First make sure stuff is sync'ed, for safety
270
+ if (this->sync() == -1)
271
+ return NULL;
272
+ // If buffering is turned off on purpose via setbuf(0,0), still allocate one...
273
+ // "Unbuffered" only really refers to put [27.8.1.4.10], while get needs at
274
+ // least a buffer of size 1 (very inefficient though, therefore make it bigger?)
275
+ // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems)
276
+ if (!p || !n)
277
+ {
278
+ // Replace existing buffer (if any) with small internal buffer
279
+ this->disable_buffer();
280
+ buffer = NULL;
281
+ buffer_size = 0;
282
+ own_buffer = true;
283
+ this->enable_buffer();
284
+ }
285
+ else
286
+ {
287
+ // Replace existing buffer (if any) with external buffer
288
+ this->disable_buffer();
289
+ buffer = p;
290
+ buffer_size = n;
291
+ own_buffer = false;
292
+ this->enable_buffer();
293
+ }
294
+ return this;
295
+ }
296
+
297
+ // Write put area to gzipped file (i.e. ensures that put area is empty)
298
+ int
299
+ gzfilebuf::sync()
300
+ {
301
+ return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0;
302
+ }
303
+
304
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
305
+
306
+ // Allocate internal buffer
307
+ void
308
+ gzfilebuf::enable_buffer()
309
+ {
310
+ // If internal buffer required, allocate one
311
+ if (own_buffer && !buffer)
312
+ {
313
+ // Check for buffered vs. "unbuffered"
314
+ if (buffer_size > 0)
315
+ {
316
+ // Allocate internal buffer
317
+ buffer = new char_type[buffer_size];
318
+ // Get area starts empty and will be expanded by underflow as need arises
319
+ this->setg(buffer, buffer, buffer);
320
+ // Setup entire internal buffer as put area.
321
+ // The one-past-end pointer actually points to the last element of the buffer,
322
+ // so that overflow(c) can safely add the extra character c to the sequence.
323
+ // These pointers remain in place for the duration of the buffer
324
+ this->setp(buffer, buffer + buffer_size - 1);
325
+ }
326
+ else
327
+ {
328
+ // Even in "unbuffered" case, (small?) get buffer is still required
329
+ buffer_size = SMALLBUFSIZE;
330
+ buffer = new char_type[buffer_size];
331
+ this->setg(buffer, buffer, buffer);
332
+ // "Unbuffered" means no put buffer
333
+ this->setp(0, 0);
334
+ }
335
+ }
336
+ else
337
+ {
338
+ // If buffer already allocated, reset buffer pointers just to make sure no
339
+ // stale chars are lying around
340
+ this->setg(buffer, buffer, buffer);
341
+ this->setp(buffer, buffer + buffer_size - 1);
342
+ }
343
+ }
344
+
345
+ // Destroy internal buffer
346
+ void
347
+ gzfilebuf::disable_buffer()
348
+ {
349
+ // If internal buffer exists, deallocate it
350
+ if (own_buffer && buffer)
351
+ {
352
+ // Preserve unbuffered status by zeroing size
353
+ if (!this->pbase())
354
+ buffer_size = 0;
355
+ delete[] buffer;
356
+ buffer = NULL;
357
+ this->setg(0, 0, 0);
358
+ this->setp(0, 0);
359
+ }
360
+ else
361
+ {
362
+ // Reset buffer pointers to initial state if external buffer exists
363
+ this->setg(buffer, buffer, buffer);
364
+ if (buffer)
365
+ this->setp(buffer, buffer + buffer_size - 1);
366
+ else
367
+ this->setp(0, 0);
368
+ }
369
+ }
370
+
371
+ /*****************************************************************************/
372
+
373
+ // Default constructor initializes stream buffer
374
+ gzifstream::gzifstream()
375
+ : std::istream(NULL), sb()
376
+ { this->init(&sb); }
377
+
378
+ // Initialize stream buffer and open file
379
+ gzifstream::gzifstream(const char* name,
380
+ std::ios_base::openmode mode)
381
+ : std::istream(NULL), sb()
382
+ {
383
+ this->init(&sb);
384
+ this->open(name, mode);
385
+ }
386
+
387
+ // Initialize stream buffer and attach to file
388
+ gzifstream::gzifstream(int fd,
389
+ std::ios_base::openmode mode)
390
+ : std::istream(NULL), sb()
391
+ {
392
+ this->init(&sb);
393
+ this->attach(fd, mode);
394
+ }
395
+
396
+ // Open file and go into fail() state if unsuccessful
397
+ void
398
+ gzifstream::open(const char* name,
399
+ std::ios_base::openmode mode)
400
+ {
401
+ if (!sb.open(name, mode | std::ios_base::in))
402
+ this->setstate(std::ios_base::failbit);
403
+ else
404
+ this->clear();
405
+ }
406
+
407
+ // Attach to file and go into fail() state if unsuccessful
408
+ void
409
+ gzifstream::attach(int fd,
410
+ std::ios_base::openmode mode)
411
+ {
412
+ if (!sb.attach(fd, mode | std::ios_base::in))
413
+ this->setstate(std::ios_base::failbit);
414
+ else
415
+ this->clear();
416
+ }
417
+
418
+ // Close file
419
+ void
420
+ gzifstream::close()
421
+ {
422
+ if (!sb.close())
423
+ this->setstate(std::ios_base::failbit);
424
+ }
425
+
426
+ /*****************************************************************************/
427
+
428
+ // Default constructor initializes stream buffer
429
+ gzofstream::gzofstream()
430
+ : std::ostream(NULL), sb()
431
+ { this->init(&sb); }
432
+
433
+ // Initialize stream buffer and open file
434
+ gzofstream::gzofstream(const char* name,
435
+ std::ios_base::openmode mode)
436
+ : std::ostream(NULL), sb()
437
+ {
438
+ this->init(&sb);
439
+ this->open(name, mode);
440
+ }
441
+
442
+ // Initialize stream buffer and attach to file
443
+ gzofstream::gzofstream(int fd,
444
+ std::ios_base::openmode mode)
445
+ : std::ostream(NULL), sb()
446
+ {
447
+ this->init(&sb);
448
+ this->attach(fd, mode);
449
+ }
450
+
451
+ // Open file and go into fail() state if unsuccessful
452
+ void
453
+ gzofstream::open(const char* name,
454
+ std::ios_base::openmode mode)
455
+ {
456
+ if (!sb.open(name, mode | std::ios_base::out))
457
+ this->setstate(std::ios_base::failbit);
458
+ else
459
+ this->clear();
460
+ }
461
+
462
+ // Attach to file and go into fail() state if unsuccessful
463
+ void
464
+ gzofstream::attach(int fd,
465
+ std::ios_base::openmode mode)
466
+ {
467
+ if (!sb.attach(fd, mode | std::ios_base::out))
468
+ this->setstate(std::ios_base::failbit);
469
+ else
470
+ this->clear();
471
+ }
472
+
473
+ // Close file
474
+ void
475
+ gzofstream::close()
476
+ {
477
+ if (!sb.close())
478
+ this->setstate(std::ios_base::failbit);
479
+ }