1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2015 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_INFO_H_ 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_INFO_H_ 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <stdint.h> 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <utility> 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/macros.h" 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo { 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// AssociatedInterfacePtrInfo stores necessary information to construct an 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// associated interface pointer. It is similar to InterfacePtrInfo except that 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// it doesn't own a message pipe handle. 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <typename Interface> 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass AssociatedInterfacePtrInfo { 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez public: 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez AssociatedInterfacePtrInfo() : version_(0u) {} 23cfc1eaa913db3974e56c87b5489bda0a2bf36d93Jay Civelli AssociatedInterfacePtrInfo(std::nullptr_t) : version_(0u) {} 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez AssociatedInterfacePtrInfo(AssociatedInterfacePtrInfo&& other) 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez : handle_(std::move(other.handle_)), version_(other.version_) { 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez other.version_ = 0u; 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez AssociatedInterfacePtrInfo(ScopedInterfaceEndpointHandle handle, 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint32_t version) 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez : handle_(std::move(handle)), version_(version) {} 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ~AssociatedInterfacePtrInfo() {} 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez AssociatedInterfacePtrInfo& operator=(AssociatedInterfacePtrInfo&& other) { 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez if (this != &other) { 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez handle_ = std::move(other.handle_); 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez version_ = other.version_; 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez other.version_ = 0u; 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return *this; 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bool is_valid() const { return handle_.is_valid(); } 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ScopedInterfaceEndpointHandle PassHandle() { 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return std::move(handle_); 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const ScopedInterfaceEndpointHandle& handle() const { return handle_; } 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_handle(ScopedInterfaceEndpointHandle handle) { 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez handle_ = std::move(handle); 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint32_t version() const { return version_; } 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void set_version(uint32_t version) { version_ = version; } 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bool Equals(const AssociatedInterfacePtrInfo& other) const { 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez if (this == &other) 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return true; 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Now that the two refer to different objects, they are equivalent if 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // and only if they are both invalid. 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return !is_valid() && !other.is_valid(); 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez private: 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ScopedInterfaceEndpointHandle handle_; 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez uint32_t version_; 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez DISALLOW_COPY_AND_ASSIGN(AssociatedInterfacePtrInfo); 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace mojo 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_INFO_H_ 78