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(); }
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(); }