
Hi Christian - This is very interesting. What is the difference, if any, between using the filtering_istream and using the filtering_ostream to do compression and decompression? Is there a performance benefit? Is there a conceptually "right" way of doing it? As I mentioned earllier on the thread, I'm using filtering_ostream for both compression and decompression; is this adhering to the library design? Thanks, Brian On Thu, Nov 11, 2010 at 3:49 AM, Pfligersdorffer, Christian <Christian.Pfligersdorffer@eos.info> wrote:
Hi Chenwj,
boost-users-bounces@lists.boost.org on Wednesday, November 10, 2010 9:43 AM:
Dear all,
Some compressed data was stored in a vector<char> buf (don't know if it's a right way to store compressed data). I used the "buf" as a source, and tried to add a gzip_decompressor to restore those data. I have tried the following approach, but it doesn't work.
vector<char> buf;
/* fill in the buf */
namespace io = boost::iostreams; io::filtering_istream in(boost::make_iterator_range(buf)); in.push(io::gzip_decompressor());
What I got is an exception,
terminate called after throwing an instance of
'boost::exception_detail::clone_impl<boost::exception_detail:: error_info_injector <std::logic_error>>' what(): chain complete Aborted
How can I compose a source which comes from a container, and add a gzip_decompressor to the source? Thanks in advance.
Regards, chenwj
it seems to me that "chain complete" is a very precise complaint. To use the filtering_istream you have to reverse natural order and push the source last. Simply try
io::filtering_istream in; in.push(io::gzip_decompressor()); in.push(boost::make_iterator_range(buf));
Hope that helps,
-- Christian Pfligersdorffer Software Engineering http://www.eos.info _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users