std::unique_ptr Decoder::decode()

in hessian2/basic_codec/class_instance_codec.cc [9:43]


std::unique_ptr<ClassInstanceObject> Decoder::decode() {
  Object::ClassInstance instance;
  auto result = std::make_unique<ClassInstanceObject>();
  values_ref_.push_back(result.get());
  auto ret = reader_->peek<uint8_t>();

  if (!ret.first) {
    return nullptr;
  }

  // Read the actual definition
  if (ret.second == 'C') {
    auto def = decode<Object::Definition>();
    if (!def) {
      return nullptr;
    }
  }

  // Find the definition by reference
  auto def = decode<Object::Definition>();
  if (!def) {
    return nullptr;
  }
  instance.def_ = def->data_;
  auto obj_len = def->data_->field_names_.size();
  for (size_t i = 0; i < obj_len; i++) {
    auto o = decode<Object>();
    if (!o) {
      return nullptr;
    }
    instance.data_.emplace_back(std::move(o));
  }
  result->setClassInstance(std::move(instance));
  return result;
}