Index: ash/mus/accelerators/accelerator_ids.h |
diff --git a/ash/mus/accelerators/accelerator_ids.h b/ash/mus/accelerators/accelerator_ids.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7d9465a5dc5ffff0a50758a35e58cb05b1379753 |
--- /dev/null |
+++ b/ash/mus/accelerators/accelerator_ids.h |
@@ -0,0 +1,32 @@ |
+// Copyright 2016 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 ASH_MUS_ACCELERATORS_ACCELERATOR_IDS_H_ |
+#define ASH_MUS_ACCELERATORS_ACCELERATOR_IDS_H_ |
+ |
+namespace ash { |
+namespace mus { |
+ |
+// Accelerator ids consist of two parts: |
+// . Upper 16 bits identifies source (namespace part). |
+// . Lower 16 supplied from client (local part). |
+constexpr uint16_t kLocalIdMask = 0xFFFF; |
+ |
+inline uint32_t ComputeAcceleratorId(uint16_t accelerator_namespace, |
+ uint16_t local_id) { |
+ return (accelerator_namespace << 16) | local_id; |
+} |
+ |
+inline uint16_t GetAcceleratorLocalId(uint32_t accelerator_id) { |
+ return static_cast<uint16_t>(accelerator_id & kLocalIdMask); |
+} |
+ |
+inline uint16_t GetAcceleratorNamespaceId(uint32_t accelerator_id) { |
+ return static_cast<uint16_t>((accelerator_id >> 16) & kLocalIdMask); |
+} |
+ |
+} // namespace mus |
+} // namespace ash |
+ |
+#endif // ASH_MUS_ACCELERATORS_ACCELERATOR_IDS_H_ |