Blender V4.3
BKE_attribute_filters.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
9
10#include "BLI_set.hh"
11
12namespace blender::bke {
13
17template<typename Fn> struct AttributeFilterFromFunc : public AttributeFilter {
18 private:
19 Fn fn_;
20
21 static_assert(std::is_invocable_r_v<Result, Fn, StringRef>);
22
23 public:
24 constexpr AttributeFilterFromFunc(Fn fn) : fn_(std::move(fn)) {}
25
26 Result filter(const StringRef name) const override
27 {
28 return fn_(name);
29 }
30};
31
37{
38 return AttributeFilterFromFunc([filter, skip](const StringRef name) {
39 if (skip.contains(name)) {
40 return AttributeFilter::Result::AllowSkip;
41 }
42 return filter.filter(name);
43 });
44}
45
47template<typename StringT>
49{
50 return AttributeFilterFromFunc([filter, &skip](const StringRef name) {
51 if (skip.contains_as(name)) {
52 return AttributeFilter::Result::AllowSkip;
53 }
54 return filter.filter(name);
55 });
56}
57
63{
64 return AttributeFilterFromFunc([skip](const StringRef name) {
65 if (skip.contains(name)) {
66 return AttributeFilter::Result::AllowSkip;
67 }
69 });
70}
71
73template<typename StringT> inline auto attribute_filter_from_skip_ref(const Set<StringT> &skip)
74{
75 return AttributeFilterFromFunc([&skip](const StringRef name) {
76 if (skip.contains_as(name)) {
77 return AttributeFilter::Result::AllowSkip;
78 }
80 });
81}
82
83} // namespace blender::bke
bool contains_as(const ForwardKey &key) const
Definition BLI_set.hh:295
constexpr bool contains(const T &value) const
Definition BLI_span.hh:278
auto attribute_filter_from_skip_ref(const Span< StringRef > skip)
auto attribute_filter_with_skip_ref(AttributeFilter filter, const Span< StringRef > skip)
Result filter(const StringRef name) const override