**** Length of code ****

883

**** Length of compressed code ****

458

**** Code before compression ****

class zlib_compressor : public one_step_output_filter {
public:
 explicit zlib_compressor(int level = Z_DEFAULT_COMPRESSION)
  : level_(level)
  {
   assert( level_ >= 0 && level_ <= 9 ||
           level == Z_DEFAULT_COMPRESSION );
  }
protected:
 void do_filter(const vector_type& src, vector_type& dest)
  {
   dest.assign(src.begin(), src.end());
   dest.insert(dest.end(), (size_t) ceil(src.size() * 1.001) + 12, 0);
   unsigned long length = (unsigned long) dest.size();
   int result =
   compress2( (Bytef*) &dest[0], &length,
              (Bytef*) &src[0], (unsigned long) src.size(),
              level_ );
   if (result == Z_OK)
    dest.erase(dest.begin() + length, dest.end());
   else if (result ==  Z_MEM_ERROR)
    throw std::bad_alloc();
   else if (result == Z_STREAM_ERROR)
    throw std::ios_base::failure("invalid level");
  }
private:
 int level_;
};


**** Code after decompression ****

class zlib_compressor : public one_step_output_filter {
public:
 explicit zlib_compressor(int level = Z_DEFAULT_COMPRESSION)
  : level_(level)
  {
   assert( level_ >= 0 && level_ <= 9 ||
           level == Z_DEFAULT_COMPRESSION );
  }
protected:
 void do_filter(const vector_type& src, vector_type& dest)
  {
   dest.assign(src.begin(), src.end());
   dest.insert(dest.end(), (size_t) ceil(src.size() * 1.001) + 12, 0);
   unsigned long length = (unsigned long) dest.size();
   int result =
   compress2( (Bytef*) &dest[0], &length,
              (Bytef*) &src[0], (unsigned long) src.size(),
              level_ );
   if (result == Z_OK)
    dest.erase(dest.begin() + length, dest.end());
   else if (result ==  Z_MEM_ERROR)
    throw std::bad_alloc();
   else if (result == Z_STREAM_ERROR)
    throw std::ios_base::failure("invalid level");
  }
private:
 int level_;
};