blob: b5cbd6b0541c890159c1912d818de3110c28dd38 [file] [log] [blame]
Yifan Hong43e2aae2017-05-17 18:36:08 -07001/*
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
22namespace android {
23namespace vintf {
24
25bool operator==(const HalInterface& lft, const HalInterface& rgt) {
Yifan Hong6e82b112018-03-20 13:06:00 -070026 if (lft.mName != rgt.mName) return false;
27 if (lft.mInstances != rgt.mInstances) return false;
Yifan Hong43e2aae2017-05-17 18:36:08 -070028 return true;
29}
30
Yifan Hong6e82b112018-03-20 13:06:00 -070031bool 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 }
Yifan Hong2b93dbe2018-03-21 17:27:47 -070038 for (const auto& instance : mRegexes) {
39 if (!func(mName, instance, true /* isRegex */)) {
40 return false;
41 }
42 }
Yifan Hong6e82b112018-03-20 13:06:00 -070043 return true;
44}
45
46bool 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
Yifan Hong2b93dbe2018-03-21 17:27:47 -070055bool 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 }
Yifan Hong6e82b112018-03-20 13:06:00 -070061}
62
Yifan Hong2b93dbe2018-03-21 17:27:47 -070063bool 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 }
Yifan Hong6e82b112018-03-20 13:06:00 -070069}
70
Yifan Hong43e2aae2017-05-17 18:36:08 -070071} // namespace vintf
72} // namespace android