xref: /aosp_15_r20/system/libvintf/HalInterface.cpp (revision 70a7ec852fcefd15a4fb57f8f183a8b1c3aacb08)
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