|
Boost Users : |
From: j.c. (jolix_at_[hidden])
Date: 2008-03-03 17:13:32
Ok I think this sucks. :-) Here is my code to implement zlib
compression/decompression via boost. However since is uses streams I
cannot simply pass a buffer. This code is intended for compress socket
buffers, but is pathetically slow. HAs anyone done this? What can I
improve? The copy seems to be the bottle neck.
thx jc
Here is my code:
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/detail/config/zlib.hpp>
using namespace boost::iostreams;
std::string compress(std::string data)
{
std::stringstream compressed;
std::stringstream decompressed;
decompressed << data;
boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
out.push(boost::iostreams::zlib_compressor());
out.push(decompressed);
boost::iostreams::copy(out, compressed);
return compressed.str();
}
std::string decompress(std::string data)
{
std::stringstream compressed;
std::stringstream decompressed;
compressed << data;
boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
out.push(boost::iostreams::zlib_decompressor());
out.push(compressed);
boost::iostreams::copy(out, decompressed);
return decompressed.str();
}
int main()
{
std::string data = compress("boo!");
std::cout << data << std::endl;
std::cout << decompress(data) << std::endl;
return 0;
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net