Philipp Kraus wrote:
On 2010-06-11 13:06:46 +0200, Philipp Kraus said:

On 2010-06-11 09:41:40 +0200, Roland Bock said:

Kraus Philipp wrote:
Hi,

I have implemented this litte code to compress a file

bio::filtering_streambuf< bio::input > l_deflate;
switch (m_compress) {
case gzip   : l_deflate.push( bio::gzip_compressor() );     break;
case bzip2  : l_deflate.push( bio::bzip2_compressor() );    break;
}



l_deflate.push( bio::file_source(p_str, BOOST_IOS::binary) );


I need only the number of compressed bytes of l_deflate. I try to

use l_deflate.size() but it returns only a fixed number.


How I can read the number of compressed bytes?


Thanks


Phil


The only method I know is to add a small filter which counts the Bytes.

I have found this
http://www.boost.org/doc/libs/1_43_0/boost/iostreams/filter/counter.hpp
Can I use this class? I don't know how I can use the class (must I only
create a new object and push it to my l_deflate) ?

I have add this code:

       bio::filtering_streambuf< bio::input > l_deflate;
       switch (m_compress) {
           case gzip   : l_deflate.push( bio::gzip_compressor() );     break;
           case bzip2  : l_deflate.push( bio::bzip2_compressor() );    break;
       }

       // create counter structures
       bio::counter l_counter;
       l_deflate.push( boost::ref(l_counter) );
       l_deflate.push( bio::file_source(p_str1, BOOST_IOS::binary) );

but l_counter.characters() returns always zero. At next I have declared a filter_ostream and copy l_deflate to the ostream in which I pushed the l_counter. At this I run into a bus error.
For testing I've copy the l_deflate to std::cout and I can see the compressed data.

Thanks for help

Hi,

I haven't actually used this filter myself, but here are some thoughts:

  1. when you get the counter to work, it will probably count the uncompressed bytes. You should add it before the compressor, so that bytes travel from source to compressor to counter.
  2. If l_counter.characters() is always zero, I'd suspect that the filter is copied, when it is pushed to the stream. I haven't found respective information in the documentation at once, so I would suggest to add some debug code to the filter class, to
Once you figure out what went wrong, maybe you could create a documentation ticket containing the relevant information.

Regards,

Roland