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