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