// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "lib/fidl/cpp/decoder.h"

#include <utility>

namespace fidl {

Decoder::Decoder(Message message) : message_(std::move(message)) {}

Decoder::~Decoder() = default;

size_t Decoder::GetOffset(void* ptr) { return GetOffset(reinterpret_cast<uintptr_t>(ptr)); }

size_t Decoder::GetOffset(uintptr_t ptr) {
  // The |ptr| value comes from the message buffer, which we've already
  // validated. That means it should coorespond to a valid offset within the
  // message.
  return ptr - reinterpret_cast<uintptr_t>(message_.bytes().data());
}

#ifdef __Fuchsia__
void Decoder::DecodeHandle(zx::object_base* value, size_t offset) {
  zx_handle_t* handle = GetPtr<zx_handle_t>(offset);
  value->reset(*handle);
  *handle = ZX_HANDLE_INVALID;
}
#endif

uint8_t* Decoder::InternalGetPtr(size_t offset) { return message_.bytes().data() + offset; }

}  // namespace fidl
