1*70a7ec85SAndroid Build Coastguard Worker /* 2*70a7ec85SAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*70a7ec85SAndroid Build Coastguard Worker * 4*70a7ec85SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*70a7ec85SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*70a7ec85SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*70a7ec85SAndroid Build Coastguard Worker * 8*70a7ec85SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*70a7ec85SAndroid Build Coastguard Worker * 10*70a7ec85SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*70a7ec85SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*70a7ec85SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*70a7ec85SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*70a7ec85SAndroid Build Coastguard Worker * limitations under the License. 15*70a7ec85SAndroid Build Coastguard Worker */ 16*70a7ec85SAndroid Build Coastguard Worker 17*70a7ec85SAndroid Build Coastguard Worker #ifndef ANDROID_VINTF_MATRIX_INSTANCE_H 18*70a7ec85SAndroid Build Coastguard Worker #define ANDROID_VINTF_MATRIX_INSTANCE_H 19*70a7ec85SAndroid Build Coastguard Worker 20*70a7ec85SAndroid Build Coastguard Worker #include <string> 21*70a7ec85SAndroid Build Coastguard Worker 22*70a7ec85SAndroid Build Coastguard Worker #include <vintf/ExclusiveTo.h> 23*70a7ec85SAndroid Build Coastguard Worker #include <vintf/FqInstance.h> 24*70a7ec85SAndroid Build Coastguard Worker #include <vintf/HalFormat.h> 25*70a7ec85SAndroid Build Coastguard Worker #include <vintf/VersionRange.h> 26*70a7ec85SAndroid Build Coastguard Worker 27*70a7ec85SAndroid Build Coastguard Worker namespace android { 28*70a7ec85SAndroid Build Coastguard Worker namespace vintf { 29*70a7ec85SAndroid Build Coastguard Worker 30*70a7ec85SAndroid Build Coastguard Worker class MatrixInstance { 31*70a7ec85SAndroid Build Coastguard Worker public: 32*70a7ec85SAndroid Build Coastguard Worker MatrixInstance(); 33*70a7ec85SAndroid Build Coastguard Worker MatrixInstance(const MatrixInstance&); 34*70a7ec85SAndroid Build Coastguard Worker MatrixInstance(MatrixInstance&&) noexcept; 35*70a7ec85SAndroid Build Coastguard Worker MatrixInstance& operator=(const MatrixInstance&); 36*70a7ec85SAndroid Build Coastguard Worker MatrixInstance& operator=(MatrixInstance&&) noexcept; 37*70a7ec85SAndroid Build Coastguard Worker 38*70a7ec85SAndroid Build Coastguard Worker using VersionType = VersionRange; 39*70a7ec85SAndroid Build Coastguard Worker // fqInstance.version is ignored. Version range is provided separately. 40*70a7ec85SAndroid Build Coastguard Worker MatrixInstance(HalFormat format, ExclusiveTo exclusiveTo, FqInstance&& fqInstance, 41*70a7ec85SAndroid Build Coastguard Worker VersionRange&& range, bool optional, bool isRegex); 42*70a7ec85SAndroid Build Coastguard Worker MatrixInstance(HalFormat format, ExclusiveTo exclusiveTo, const FqInstance fqInstance, 43*70a7ec85SAndroid Build Coastguard Worker const VersionRange& range, bool optional, bool isRegex); 44*70a7ec85SAndroid Build Coastguard Worker const std::string& package() const; 45*70a7ec85SAndroid Build Coastguard Worker const VersionRange& versionRange() const; 46*70a7ec85SAndroid Build Coastguard Worker std::string interface() const; 47*70a7ec85SAndroid Build Coastguard Worker bool optional() const; 48*70a7ec85SAndroid Build Coastguard Worker HalFormat format() const; 49*70a7ec85SAndroid Build Coastguard Worker ExclusiveTo exclusiveTo() const; 50*70a7ec85SAndroid Build Coastguard Worker 51*70a7ec85SAndroid Build Coastguard Worker bool isSatisfiedBy(const FqInstance& provided) const; 52*70a7ec85SAndroid Build Coastguard Worker 53*70a7ec85SAndroid Build Coastguard Worker // If isRegex, return true if instance matches the pattern. 54*70a7ec85SAndroid Build Coastguard Worker // If !isRegex, return true if e == instance(). 55*70a7ec85SAndroid Build Coastguard Worker // Follows rules of "Extended Regular Expression" (ERE). 56*70a7ec85SAndroid Build Coastguard Worker bool matchInstance(const std::string& e) const; 57*70a7ec85SAndroid Build Coastguard Worker 58*70a7ec85SAndroid Build Coastguard Worker // If isRegex, return the regex pattern. Else empty string. 59*70a7ec85SAndroid Build Coastguard Worker const std::string& regexPattern() const; 60*70a7ec85SAndroid Build Coastguard Worker 61*70a7ec85SAndroid Build Coastguard Worker // If !isRegex, return the exact instance name. Else empty string. 62*70a7ec85SAndroid Build Coastguard Worker const std::string& exactInstance() const; 63*70a7ec85SAndroid Build Coastguard Worker 64*70a7ec85SAndroid Build Coastguard Worker bool isRegex() const; 65*70a7ec85SAndroid Build Coastguard Worker 66*70a7ec85SAndroid Build Coastguard Worker // Return a human-readable description of the interface. 67*70a7ec85SAndroid Build Coastguard Worker // Version is replaced by replaceVersion. 68*70a7ec85SAndroid Build Coastguard Worker // e.g. for HIDL, [email protected]::IFoo, 69*70a7ec85SAndroid Build Coastguard Worker // for AIDL, android.hardware.foo.IFoo (@1) 70*70a7ec85SAndroid Build Coastguard Worker std::string interfaceDescription(Version replaceVersion) const; 71*70a7ec85SAndroid Build Coastguard Worker 72*70a7ec85SAndroid Build Coastguard Worker // Return a human-readable description of the instance. 73*70a7ec85SAndroid Build Coastguard Worker // Version is replaced by replaceVersion. 74*70a7ec85SAndroid Build Coastguard Worker // e.g. for HIDL, [email protected]::IFoo/default, 75*70a7ec85SAndroid Build Coastguard Worker // for AIDL, android.hardware.foo.IFoo/default (@1) 76*70a7ec85SAndroid Build Coastguard Worker std::string description(Version replaceVersion) const; 77*70a7ec85SAndroid Build Coastguard Worker 78*70a7ec85SAndroid Build Coastguard Worker private: 79*70a7ec85SAndroid Build Coastguard Worker HalFormat mFormat = HalFormat::HIDL; 80*70a7ec85SAndroid Build Coastguard Worker ExclusiveTo mExclusiveTo = ExclusiveTo::EMPTY; 81*70a7ec85SAndroid Build Coastguard Worker FqInstance mFqInstance; 82*70a7ec85SAndroid Build Coastguard Worker VersionRange mRange; 83*70a7ec85SAndroid Build Coastguard Worker bool mOptional = false; 84*70a7ec85SAndroid Build Coastguard Worker bool mIsRegex = false; 85*70a7ec85SAndroid Build Coastguard Worker }; 86*70a7ec85SAndroid Build Coastguard Worker 87*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf 88*70a7ec85SAndroid Build Coastguard Worker } // namespace android 89*70a7ec85SAndroid Build Coastguard Worker 90*70a7ec85SAndroid Build Coastguard Worker #endif // ANDROID_VINTF_MATRIX_INSTANCE_H 91