// Copyright 2015 The Chromium 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 MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_ #define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_ #include namespace mojo { // The size of the type matters because it is directly used in messages. using InterfaceId = uint32_t; // IDs of associated interface can be generated at both sides of the message // pipe. In order to avoid collision, the highest bit is used as namespace bit: // at the side where the client-side of the master interface lives, IDs are // generated with the namespace bit set to 1; at the opposite side IDs are // generated with the namespace bit set to 0. const uint32_t kInterfaceIdNamespaceMask = 0x80000000; const InterfaceId kMasterInterfaceId = 0x00000000; const InterfaceId kInvalidInterfaceId = 0xFFFFFFFF; inline bool IsMasterInterfaceId(InterfaceId id) { return id == kMasterInterfaceId; } inline bool IsValidInterfaceId(InterfaceId id) { return id != kInvalidInterfaceId; } inline bool HasInterfaceIdNamespaceBitSet(InterfaceId id) { return (id & kInterfaceIdNamespaceMask) != 0; } } // namespace mojo #endif // MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_