swift
predicates.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_PREDICATES_H
7 #define SWIFT_MISC_PREDICATES_H
8 
9 #include <functional>
10 #include <tuple>
11 
12 #include "misc/algorithm.h"
13 
14 namespace swift::misc
15 {
16  class CPropertyIndexVariantMap;
17 
18  namespace predicates
19  {
25  template <class... Ts>
26  auto MemberEqual(Ts... vs)
27  {
28  return [vs...](const auto &object) {
29  bool equal = true;
30  tupleForEachPair(std::make_tuple(vs...), [&](auto member, const auto &value) {
31  equal = equal && std::invoke(member, object) == value;
32  });
33  return equal;
34  };
35  }
36 
42  template <class... Ts>
43  auto MemberLess(Ts... vs)
44  {
45  return [vs...](const auto &a, const auto &b) {
46  return std::forward_as_tuple(std::invoke(vs, a)...) < std::forward_as_tuple(std::invoke(vs, b)...);
47  };
48  }
49 
53  template <class T>
54  auto MemberTransform(T memberFunc)
55  {
56  return [memberFunc](const auto &object) { return std::invoke(memberFunc, object); };
57  }
58 
63  template <class T>
64  auto MemberValid(T memberFunc)
65  {
66  return [memberFunc](const auto &object) { return std::invoke(memberFunc, object).isValid(); };
67  }
68 
74  template <class T, class C>
75  auto MemberIsAnyOf(T memberFunc, const C &container)
76  {
77  return [memberFunc, &container](const auto &object) {
78  return container.contains(std::invoke(memberFunc, object));
79  };
80  }
81 
85  template <class T>
86  auto Equals(T &&value)
87  {
88  return [value = std::forward<T>(value)](const T &object) { return object == value; };
89  }
90 
95  template <class... Ts>
96  auto EqualsByMembers(Ts... vs)
97  {
98  return
99  [vs...](const auto &a, const auto &b) { return ((std::invoke(vs, a) == std::invoke(vs, b)) && ...); };
100  }
101 
102  } // namespace predicates
103 } // namespace swift::misc
104 
105 #endif // SWIFT_MISC_PREDICATES_H
auto Equals(T &&value)
Returns a predicate that returns true if its argument compares equal with another,...
Definition: predicates.h:86
auto MemberTransform(T memberFunc)
Returns a function object that returns the value returned by one of it's argument member functions.
Definition: predicates.h:54
auto EqualsByMembers(Ts... vs)
Returns a predicate that returns true if its arguments compare equal to each other,...
Definition: predicates.h:96
auto MemberValid(T memberFunc)
Returns a predicate that returns true if the isValid() method of the value returned from one of its m...
Definition: predicates.h:64
auto MemberIsAnyOf(T memberFunc, const C &container)
Returns a predicate that returns true if the value returned by its argument's member function can be ...
Definition: predicates.h:75
auto MemberEqual(Ts... vs)
Predicate which tests whether some member functions return some values.
Definition: predicates.h:26
auto MemberLess(Ts... vs)
Predicate which compares the return values of some member functions of two objects.
Definition: predicates.h:43
Free functions in swift::misc.
void tupleForEachPair(T &&tuple, F &&visitor)
Invoke a visitor function on each pair of elements of a tuple in order.
Definition: algorithm.h:172