示例#1
0
void CCoder::readBlocks(ISequentialInStream *inStream, UInt64 *inSizeProcessed) {
  size_t metadata_size = (size_t)read_int(inStream, inSizeProcessed);
  size_t compressed_size = (size_t)read_int(inStream, inSizeProcessed);
  std::vector<uint8_t> compressed_buffer;
  compressed_buffer.assign(compressed_size, 0);
  if (FAILED(ReadStream(inStream, compressed_buffer.data(), &compressed_size)))
    return;
  ReadMemoryStream rms_compressed(compressed_buffer.data(), compressed_buffer.data() + compressed_size);
  std::unique_ptr<Compressor> c(createMetaDataCompressor());
  std::vector<uint8_t> metadata;
  WriteVectorStream wvs(&metadata);
  c->decompress(&rms_compressed, &wvs, metadata_size);
  auto cmp = read_int(inStream, inSizeProcessed);
  check(cmp == 1234u);
  ReadMemoryStream rms(&metadata);
  blocks_.read(&rms);
}
示例#2
0
void Archive::writeBlocks() {
	std::vector<uint8_t> temp;
	WriteVectorStream wvs(&temp);
	// Write out the blocks into temp.
	blocks_.write(&wvs);
	size_t blocks_size = wvs.tell();
	files_.write(&wvs);
	size_t files_size = wvs.tell() - blocks_size;
	// Compress overhead.
	std::unique_ptr<Compressor> c(createMetaDataCompressor());
	ReadMemoryStream rms(&temp[0], &temp[0] + temp.size());
	auto start_pos = stream_->tell();
	stream_->leb128Encode(temp.size());
	c->compress(&rms, stream_);
	stream_->leb128Encode(static_cast<uint64_t>(1234u));
	std::cout << "(flist=" << files_size << "+" << "blocks=" << blocks_size << ")=" << temp.size() << " -> " << stream_->tell() - start_pos << std::endl << std::endl;
}
示例#3
0
void Archive::readBlocks() {
	if (!files_.empty()) {
		// Already read.
		return;
	}
	auto metadata_size = stream_->leb128Decode();
	std::cout << "Metadata size=" << metadata_size << std::endl;
	// Decompress overhead.
	std::unique_ptr<Compressor> c(createMetaDataCompressor());
	std::vector<uint8_t> metadata;
	WriteVectorStream wvs(&metadata);
	auto start_pos = stream_->tell();
	c->decompress(stream_, &wvs, metadata_size);
	auto cmp = stream_->leb128Decode();
	check(cmp == 1234u);
	ReadMemoryStream rms(&metadata);
	blocks_.read(&rms);
	files_.read(&rms);
}
示例#4
0
void CCoder::writeBlocks(ISequentialOutStream *outStream, UInt64 *outSizeProcessed) {
  std::vector<uint8_t> temp;
  WriteVectorStream wvs(&temp);
  blocks_.write(&wvs);
  std::unique_ptr<Compressor> c(createMetaDataCompressor());
  ReadMemoryStream rms(&temp[0], &temp[0] + temp.size());

  std::vector<uint8_t> compressed_buffer;
  WriteVectorStream wvs_compressed(&compressed_buffer);

  c->compress(&rms, &wvs_compressed);

  if (FAILED(NCompress::NPackjpg::write_int(outStream, temp.size(), outSizeProcessed)))
    return;
  if (FAILED(NCompress::NPackjpg::write_int(outStream, compressed_buffer.size(), outSizeProcessed)))
    return;
  if (FAILED(WriteStream(outStream, compressed_buffer.data(), compressed_buffer.size())))
    return;
  *outSizeProcessed += compressed_buffer.size();
  NCompress::NPackjpg::write_int(outStream, 1234u, outSizeProcessed);
}