// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/user_manager/include_exclude_account_id_filter.h"
#include <vector>
#include "base/check.h"
#include "base/containers/flat_set.h"
#include "components/account_id/account_id.h"
namespace user_manager {
namespace {
bool AreSetsMutuallyExclusive(const base::flat_set<AccountId>& set1,
const base::flat_set<AccountId>& set2) {
for (const auto& item : set1) {
if (set2.count(item) > 0) {
return false;
}
}
return true;
}
} // namespace
IncludeExcludeAccountIdFilter::IncludeExcludeAccountIdFilter() = default;
IncludeExcludeAccountIdFilter::IncludeExcludeAccountIdFilter(
bool included_by_default,
std::vector<AccountId> include_list,
std::vector<AccountId> exclude_list)
: included_by_default_(included_by_default),
include_set_(include_list.begin(), include_list.end()),
exclude_set_(exclude_list.begin(), exclude_list.end()) {
DCHECK(AreSetsMutuallyExclusive(include_set_, exclude_set_));
}
IncludeExcludeAccountIdFilter::IncludeExcludeAccountIdFilter(
IncludeExcludeAccountIdFilter&& other) = default;
IncludeExcludeAccountIdFilter& IncludeExcludeAccountIdFilter::operator=(
IncludeExcludeAccountIdFilter&& other) = default;
IncludeExcludeAccountIdFilter::~IncludeExcludeAccountIdFilter() = default;
bool IncludeExcludeAccountIdFilter::IsAccountIdIncluded(
const AccountId& item) const {
if (include_set_.count(item) > 0) {
return true;
}
if (exclude_set_.count(item) > 0) {
return false;
}
return included_by_default_;
}
} // namespace user_manager