blob: 3c68cdae83698adedb6cb11aa7bc3cd49c922cfe [file] [log] [blame]
// 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.
#ifndef LIB_FIDL_CPP_DECODER_H_
#define LIB_FIDL_CPP_DECODER_H_
#include <lib/fidl/cpp/message.h>
#include <zircon/fidl.h>
#ifdef __Fuchsia__
#include <lib/zx/object.h>
#endif
namespace fidl {
class Decoder final {
public:
explicit Decoder(Message message);
~Decoder();
template <typename T>
T* GetPtr(size_t offset) {
return reinterpret_cast<T*>(InternalGetPtr(offset));
}
size_t GetOffset(void* ptr);
size_t GetOffset(uintptr_t ptr);
#ifdef __Fuchsia__
void DecodeHandle(zx::object_base* value, size_t offset);
#endif
private:
uint8_t* InternalGetPtr(size_t offset);
Message message_;
};
} // namespace fidl
#endif // LIB_FIDL_CPP_DECODER_H_