Beispiel #1
0
void ZipArchiveEntry::InternalCompressStream(std::istream& inputStream, std::ostream& outputStream)
{
  std::ostream* intermediateStream = &outputStream;

  std::unique_ptr<zip_cryptostream> cryptoStream;
  if (!_password.empty())
  {
    this->SetGeneralPurposeBitFlag(BitFlag::Encrypted);

    // std::make_unique<zip_cryptostream>();
    cryptoStream = std::unique_ptr<zip_cryptostream>(new zip_cryptostream());

    cryptoStream->init(outputStream, _password.c_str());
    cryptoStream->set_final_byte(this->GetLastByteOfEncryptionHeader());
    intermediateStream = cryptoStream.get();
  }

  crc32stream crc32Stream;
  crc32Stream.init(inputStream);

  compression_encoder_stream compressionStream(
    _compressionMethod->GetEncoder(),
    _compressionMethod->GetEncoderProperties(),
    *intermediateStream);
  intermediateStream = &compressionStream;
  utils::stream::copy(crc32Stream, *intermediateStream);

  intermediateStream->flush();

  _localFileHeader.UncompressedSize = static_cast<uint32_t>(compressionStream.get_bytes_read());
  _localFileHeader.CompressedSize   = static_cast<uint32_t>(compressionStream.get_bytes_written() + (!_password.empty() ? 12 : 0));
  _localFileHeader.Crc32 = crc32Stream.get_crc32();

  this->SyncCDFH_with_LFH();
}
Beispiel #2
0
std::unique_ptr<std::vector<char>> Compression::compress(
        const char* data,
        const std::size_t size,
        const Schema& schema)
{
    CompressionStream compressionStream(size);
    pdal::LazPerfCompressor<CompressionStream> compressor(
            compressionStream,
            schema.pdalLayout().dimTypes());

    compressor.compress(data, size);
    compressor.done();

    return compressionStream.data();
}