// 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 <stdint.h>
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_