Chromium Code Reviews| Index: mojo/public/cpp/bindings/interface_handle.h |
| diff --git a/mojo/public/cpp/bindings/interface_handle.h b/mojo/public/cpp/bindings/interface_handle.h |
| index e03fad5203b4b37ff27b9e9c906090142675a833..44ac671c442246d7410a93e4e41fec432288c728 100644 |
| --- a/mojo/public/cpp/bindings/interface_handle.h |
| +++ b/mojo/public/cpp/bindings/interface_handle.h |
| @@ -5,17 +5,23 @@ |
| #ifndef MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_PTR_INFO_H_ |
| #define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_PTR_INFO_H_ |
| +#include <cstddef> |
| + |
| #include "mojo/public/cpp/system/macros.h" |
| #include "mojo/public/cpp/system/message_pipe.h" |
| namespace mojo { |
| +template <typename Interface> |
| +class InterfacePtr; |
| + |
| // InterfaceHandle stores necessary information to communicate with a remote |
| // interface implementation, which could be used to construct an InterfacePtr. |
| template <typename Interface> |
| class InterfaceHandle { |
| public: |
| InterfaceHandle() : version_(0u) {} |
| + InterfaceHandle(std::nullptr_t) : version_(0u) {} |
| InterfaceHandle(ScopedMessagePipeHandle handle, uint32_t version) |
| : handle_(handle.Pass()), version_(version) {} |
| @@ -25,6 +31,14 @@ class InterfaceHandle { |
| other.version_ = 0u; |
| } |
| + // Making this constructor templated ensures that it is not type-instantiated |
| + // unless it is used, making the InterfacePtr<->InterfaceHandle codependency |
| + // less fragile. |
| + template <typename SameInterfaceAsAbove> |
|
viettrungluu
2016/02/11 18:26:29
If you want to make it clearer that users probably
vardhan
2016/02/11 22:47:53
Done.
|
| + InterfaceHandle(InterfacePtr<SameInterfaceAsAbove>&& ptr) { |
| + *this = ptr.PassInterfaceHandle(); |
| + } |
| + |
| ~InterfaceHandle() {} |
| InterfaceHandle& operator=(InterfaceHandle&& other) { |
| @@ -37,6 +51,8 @@ class InterfaceHandle { |
| return *this; |
| } |
| + // Tests as true if we have a valid handle. |
| + explicit operator bool() const { return is_valid(); } |
| bool is_valid() const { return handle_.is_valid(); } |
| ScopedMessagePipeHandle PassHandle() { return handle_.Pass(); } |