1*70a7ec85SAndroid Build Coastguard Worker /*
2*70a7ec85SAndroid Build Coastguard Worker * Copyright (C) 2017 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 #include <set>
18*70a7ec85SAndroid Build Coastguard Worker #include <string>
19*70a7ec85SAndroid Build Coastguard Worker
20*70a7ec85SAndroid Build Coastguard Worker #include "HalInterface.h"
21*70a7ec85SAndroid Build Coastguard Worker
22*70a7ec85SAndroid Build Coastguard Worker namespace android {
23*70a7ec85SAndroid Build Coastguard Worker namespace vintf {
24*70a7ec85SAndroid Build Coastguard Worker
operator ==(const HalInterface & lft,const HalInterface & rgt)25*70a7ec85SAndroid Build Coastguard Worker bool operator==(const HalInterface& lft, const HalInterface& rgt) {
26*70a7ec85SAndroid Build Coastguard Worker if (lft.mName != rgt.mName) return false;
27*70a7ec85SAndroid Build Coastguard Worker if (lft.mInstances != rgt.mInstances) return false;
28*70a7ec85SAndroid Build Coastguard Worker return true;
29*70a7ec85SAndroid Build Coastguard Worker }
30*70a7ec85SAndroid Build Coastguard Worker
forEachInstance(const std::function<bool (const std::string &,const std::string &,bool isRegex)> & func) const31*70a7ec85SAndroid Build Coastguard Worker bool HalInterface::forEachInstance(
32*70a7ec85SAndroid Build Coastguard Worker const std::function<bool(const std::string&, const std::string&, bool isRegex)>& func) const {
33*70a7ec85SAndroid Build Coastguard Worker for (const auto& instance : mInstances) {
34*70a7ec85SAndroid Build Coastguard Worker if (!func(mName, instance, false /* isRegex */)) {
35*70a7ec85SAndroid Build Coastguard Worker return false;
36*70a7ec85SAndroid Build Coastguard Worker }
37*70a7ec85SAndroid Build Coastguard Worker }
38*70a7ec85SAndroid Build Coastguard Worker for (const auto& instance : mRegexes) {
39*70a7ec85SAndroid Build Coastguard Worker if (!func(mName, instance, true /* isRegex */)) {
40*70a7ec85SAndroid Build Coastguard Worker return false;
41*70a7ec85SAndroid Build Coastguard Worker }
42*70a7ec85SAndroid Build Coastguard Worker }
43*70a7ec85SAndroid Build Coastguard Worker return true;
44*70a7ec85SAndroid Build Coastguard Worker }
45*70a7ec85SAndroid Build Coastguard Worker
hasAnyInstance() const46*70a7ec85SAndroid Build Coastguard Worker bool HalInterface::hasAnyInstance() const {
47*70a7ec85SAndroid Build Coastguard Worker bool found = false;
48*70a7ec85SAndroid Build Coastguard Worker forEachInstance([&found](const auto&, const auto&, bool) {
49*70a7ec85SAndroid Build Coastguard Worker found = true;
50*70a7ec85SAndroid Build Coastguard Worker return false; // break;
51*70a7ec85SAndroid Build Coastguard Worker });
52*70a7ec85SAndroid Build Coastguard Worker return found;
53*70a7ec85SAndroid Build Coastguard Worker }
54*70a7ec85SAndroid Build Coastguard Worker
insertInstance(const std::string & instanceOrPattern,bool isRegex)55*70a7ec85SAndroid Build Coastguard Worker bool HalInterface::insertInstance(const std::string& instanceOrPattern, bool isRegex) {
56*70a7ec85SAndroid Build Coastguard Worker if (isRegex) {
57*70a7ec85SAndroid Build Coastguard Worker return mRegexes.insert(instanceOrPattern).second;
58*70a7ec85SAndroid Build Coastguard Worker } else {
59*70a7ec85SAndroid Build Coastguard Worker return mInstances.insert(instanceOrPattern).second;
60*70a7ec85SAndroid Build Coastguard Worker }
61*70a7ec85SAndroid Build Coastguard Worker }
62*70a7ec85SAndroid Build Coastguard Worker
removeInstance(const std::string & instanceOrPattern,bool isRegex)63*70a7ec85SAndroid Build Coastguard Worker bool HalInterface::removeInstance(const std::string& instanceOrPattern, bool isRegex) {
64*70a7ec85SAndroid Build Coastguard Worker if (isRegex) {
65*70a7ec85SAndroid Build Coastguard Worker return mRegexes.erase(instanceOrPattern) > 0;
66*70a7ec85SAndroid Build Coastguard Worker } else {
67*70a7ec85SAndroid Build Coastguard Worker return mInstances.erase(instanceOrPattern) > 0;
68*70a7ec85SAndroid Build Coastguard Worker }
69*70a7ec85SAndroid Build Coastguard Worker }
70*70a7ec85SAndroid Build Coastguard Worker
71*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf
72*70a7ec85SAndroid Build Coastguard Worker } // namespace android
73