bool Encoder::encode()

in hessian2/basic_codec/byte_codec.cc [81:114]


bool Encoder::encode(const std::vector<uint8_t> &data) {
  size_t size = data.size();
  if (size < 16) {
    writer_->writeByte(0x20 + size);
    writer_->rawWrite(
        absl::string_view(std::move(std::string(data.begin(), data.end()))));
    return true;
  }
  if (size < 1024) {
    writer_->writeByte(0x34 + (size >> 8));
    writer_->writeByte(size);
    writer_->rawWrite(
        absl::string_view(std::move(std::string(data.begin(), data.end()))));
    return true;
  }

  uint32_t offset = 0;
  while (size > CHUNK_SIZE) {
    writer_->writeByte(0x41);
    writer_->writeBE<uint16_t>(CHUNK_SIZE);
    size -= CHUNK_SIZE;
    writer_->rawWrite(absl::string_view(std::move(std::string(
        data.begin() + offset, data.begin() + offset + CHUNK_SIZE))));
    offset += CHUNK_SIZE;
  }

  if (size > 0) {
    writer_->writeByte(0x42);
    writer_->writeBE<uint16_t>(size);
    writer_->rawWrite(absl::string_view(
        std::move(std::string(data.begin() + offset, data.end()))));
  }
  return true;
}