40 #include <boost/iostreams/concepts.hpp>
41 #include <boost/iostreams/traits.hpp>
78 void xz_error(
const std::string &msg);
112 void deflate_block();
117 xzdeflater(std::ostream& os,
const bool syncblocks=
true,
118 const size_t bs=131072,
119 const int level=6,
const bool extreme=
false);
128 void write(
const char* s,
size_t n);
133 :
public boost::iostreams::sink
145 std::streamsize
write(
const char* s,std::streamsize n);
152 :
public boost::iostreams::stream<xzdeflater_sink>
161 xz_ostream(std::ostream* os,
const bool syncblocks=
true,
const size_t bs=131072);
182 ::lzma_index_iter m_iter_core;
202 static const ::lzma_stream_flags &stream_flags(
const iterator &it)
204 return *it.m_iter_core.stream.flags;
216 void locate(
const uint64_t uncompressed_pos);
242 ::lzma_stream m_strm;
244 ::lzma_index *m_index;
250 void parse_recursive(std::istream &is);
257 xzindex(std::istream *
const is);
273 void print(std::ostream &os)
const;
283 static const size_t MAX_BLOCK_HEADER_SIZE=1024;
289 static const size_t MAX_BLOCK_READ=
BUFSIZE-MAX_BLOCK_HEADER_SIZE;
296 SEQ_INDEX_FOOTER_PADDING
301 size_t m_writebuf_limit;
307 ::lzma_stream m_strm;
309 ::lzma_stream_flags m_header;
310 ::lzma_block m_block_options;
311 ::lzma_filter m_filters[LZMA_FILTERS_MAX+1];
312 ::lzma_stream_flags m_footer;
323 uint64_t m_stream_number;
324 uint64_t m_block_number;
329 void get_input(
const size_t n,
const std::string &label);
332 bool read_stream_header();
333 void read_block_header();
334 void read_stream_footer();
335 void read_stream_padding();
338 void process_input(
size_t n);
342 bool process_output(
char **s,
size_t nmax);
346 xzinflater(std::istream &is,
const bool raw_seekable);
354 std::streamsize
read(
char *s,
size_t n);
357 std::streampos
seek(int64_t ofs,std::ios_base::seekdir way);
359 const xzindex &get_index()
const;
364 :
public boost::iostreams::device<boost::iostreams::input_seekable>
375 std::streamsize
read(
char *s,std::streamsize n);
377 std::streampos seek(boost::iostreams::stream_offset off,
378 std::ios_base::seekdir way);
383 :
public boost::iostreams::stream<xzinflater_source>
391 xz_istream(std::istream *is,
const bool raw_seekable);
395 const xzindex &get_index()
const;
397 static std::string inflate(
const std::string &zdata);
402 #endif // WITHOUT_LZMA
403 #endif // XZINDEX_HPP__