1c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong/* 2c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Copyright (C) 2017 The Android Open Source Project 3c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * 4c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Licensed under the Apache License, Version 2.0 (the "License"); 5c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * you may not use this file except in compliance with the License. 6c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * You may obtain a copy of the License at 7c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * 8c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * http://www.apache.org/licenses/LICENSE-2.0 9c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * 10c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Unless required by applicable law or agreed to in writing, software 11c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * distributed under the License is distributed on an "AS IS" BASIS, 12c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * See the License for the specific language governing permissions and 14c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * limitations under the License. 15c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong */ 16c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 17c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 18c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#ifndef ANDROID_VINTF_ARCH_H 19c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#define ANDROID_VINTF_ARCH_H 20c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 21c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#include <stdint.h> 22c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#include <string> 23c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#include <array> 24c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 25c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongnamespace android { 26c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongnamespace vintf { 27c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 28c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongenum class Arch : size_t { 29c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong ARCH_EMPTY = 0, 30c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong ARCH_32, 31c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong ARCH_64, 32c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong ARCH_32_64 33c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong}; 34c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 35c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongstatic const std::array<std::string, 4> gArchStrings = { 36c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong { 37c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong "", 38c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong "32", 39c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong "64", 40c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong "32+64", 41c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong } 42c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong}; 43c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 44c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Honginline bool has32(Arch arch) { 45c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong return arch == Arch::ARCH_32 || arch == Arch::ARCH_32_64; 46c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} 47c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 48c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Honginline bool has64(Arch arch) { 49c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong return arch == Arch::ARCH_64 || arch == Arch::ARCH_32_64; 50c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} 51c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 526a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Honginline constexpr Arch operator|(Arch lft, Arch rgt) { 536a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong return static_cast<Arch>(static_cast<size_t>(lft) | static_cast<size_t>(rgt)); 546a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong} 556a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hongstatic_assert((Arch::ARCH_32 | Arch::ARCH_64) == Arch::ARCH_32_64, "bad Arch::operator|"); 566a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong 576a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Honginline Arch& operator|=(Arch& lft, Arch rgt) { 586a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong return (lft = lft | rgt); 596a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong} 606a1a12fa16b7c34a130f393ef9923bf67fc02c3aYifan Hong 61c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} // namespace vintf 62c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} // namespace android 63c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong 64c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#endif // ANDROID_VINTF_ARCH_H 65