1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_ 7 8 #include <stdint.h> 9 10 namespace mojo { 11 12 // The size of the type matters because it is directly used in messages. 13 using InterfaceId = uint32_t; 14 15 // IDs of associated interface can be generated at both sides of the message 16 // pipe. In order to avoid collision, the highest bit is used as namespace bit: 17 // at the side where the client-side of the master interface lives, IDs are 18 // generated with the namespace bit set to 1; at the opposite side IDs are 19 // generated with the namespace bit set to 0. 20 const uint32_t kInterfaceIdNamespaceMask = 0x80000000; 21 22 const InterfaceId kMasterInterfaceId = 0x00000000; 23 const InterfaceId kInvalidInterfaceId = 0xFFFFFFFF; 24 IsMasterInterfaceId(InterfaceId id)25inline bool IsMasterInterfaceId(InterfaceId id) { 26 return id == kMasterInterfaceId; 27 } 28 IsValidInterfaceId(InterfaceId id)29inline bool IsValidInterfaceId(InterfaceId id) { 30 return id != kInvalidInterfaceId; 31 } 32 HasInterfaceIdNamespaceBitSet(InterfaceId id)33inline bool HasInterfaceIdNamespaceBitSet(InterfaceId id) { 34 return (id & kInterfaceIdNamespaceMask) != 0; 35 } 36 37 } // namespace mojo 38 39 #endif // MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_ID_H_ 40