#ifndef MOJO_PUBLIC_CPP_BINDINGS_STRUCT_PTR_H_
#define MOJO_PUBLIC_CPP_BINDINGS_STRUCT_PTR_H_
#include <cstddef>
#include <functional>
#include <memory>
#include <new>
#include "base/check.h"
#include "mojo/public/cpp/bindings/lib/hash_util.h"
#include "mojo/public/cpp/bindings/type_converter.h"
#include "third_party/abseil-cpp/absl/utility/utility.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
namespace mojo {
namespace internal {
constexpr size_t kHashSeed = …;
template <typename Struct>
class StructPtrWTFHelper;
template <typename Struct>
class InlinedStructPtrWTFHelper;
}
template <typename S>
class StructPtr { … };
template <typename S>
class InlinedStructPtr { … };
namespace internal {
template <typename Struct>
class StructPtrWTFHelper { … };
template <typename Struct>
class InlinedStructPtrWTFHelper { … };
template <typename T>
struct IsStructPtrImpl : std::false_type { … };
IsStructPtrImpl<StructPtr<S>>;
IsStructPtrImpl<InlinedStructPtr<S>>;
}
IsStructPtrV;
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator==(const Ptr& lhs, const Ptr& rhs) { … }
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator!=(const Ptr& lhs, const Ptr& rhs) { … }
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator<(const Ptr& lhs, const Ptr& rhs) { … }
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator<=(const Ptr& lhs, const Ptr& rhs) { … }
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator>(const Ptr& lhs, const Ptr& rhs) { … }
template <typename Ptr, std::enable_if_t<IsStructPtrV<Ptr>>* = nullptr>
bool operator>=(const Ptr& lhs, const Ptr& rhs) { … }
}
namespace std {
hash<mojo::StructPtr<T>>;
hash<mojo::InlinedStructPtr<T>>;
}
#endif