Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
FunctionalConcepts.hpp
Go to the documentation of this file.
1#pragma once
2#include <functional>
3#include <concepts>
4#include <ranges>
5
6namespace fishnet::util{
7
8template<typename F, typename T, typename R>
9concept UnaryFunction = std::invocable<F, T> && std::convertible_to<std::invoke_result_t<F,T>, R>;
10
11template<typename T,typename R>
12using UnaryFunction_t = std::function<R(const T &)>;
13
14template<typename F, typename T, typename U,typename R>
15concept BiFunction = std::invocable<F, T, U> && std::convertible_to<std::invoke_result_t<F,T,U>, R>;
16
17template<typename T, typename U, typename R>
18using BiFunction_t = std::function<R(const T &, const U &)>;
19
20template<typename F, typename T>
22
23template<typename T>
24using UnaryOperator_t = std::function<T(const T &)>;
25
26template<typename F, typename T>
28
29template<typename T>
30using BiOperator_t = std::function<T(const T &, const T &)>;
31
32template<typename T>
33using BiOperator_t = std::function<T(const T &, const T &)>;
34
35template<typename F, typename T>
37
38template<typename T>
39using Predicate_t = std::function<bool(const T &)>;
40
41template<typename F,typename T,typename R= T>
43
44template<typename T, typename R = T>
45using BiPredicate_t = std::function<bool(const T &, const R &)>;
46
47template<typename F, typename T>
48concept Producer = std::invocable<F> && std::convertible_to<std::invoke_result_t<F>, T>;
49
50template<typename T>
51using Producer_t = std::function<T()>;
52
53template<typename F, typename T>
55
56template<typename T>
58
59template<typename F>
60concept Runnable = std::convertible_to<F,std::function<void()>>;
61
62template<typename Hasher,typename Key>
64
65template<typename F, typename RangeType, typename ResultType = std::ranges::range_value_t<RangeType>>
66concept ReduceFunction = std::ranges::forward_range<RangeType> && UnaryFunction<F,RangeType,ResultType>;
67
68template<typename RangeType, typename ResultType = std::ranges::range_value_t<RangeType>>
69using ReduceFunction_t = std::function<ResultType(const RangeType &)>;
70
72 constexpr bool inline operator()(const auto & t)const noexcept {
73 return true;
74 }
75};
76
78 constexpr bool inline operator()(const auto & t) const noexcept {
79 return false;
80 }
81};
82
84 constexpr bool inline operator()(const auto & lhs, const auto & rhs) const noexcept {
85 return true;
86 }
87};
88
90 constexpr bool inline operator()(const auto & lhs, const auto & rhs) const noexcept {
91 return false;
92 }
93};
94
95struct Identity{
96 template<typename T>
97 constexpr T inline operator()(const T & t)const noexcept {
98 return t;
99 }
100};
101
102struct NOOP{
103 constexpr void inline operator()(const auto & t)const noexcept {
104 return;
105 }
106};
107
109private:
110 const size_t limit;
111 size_t counter;
112public:
113 LimitPredicate(size_t limit):limit(limit),counter(0){}
114 bool operator()(const auto & t) noexcept {
115 return counter++ < limit;
116 }
117};
118}
Definition FunctionalConcepts.hpp:108
LimitPredicate(size_t limit)
Definition FunctionalConcepts.hpp:113
bool operator()(const auto &t) noexcept
Definition FunctionalConcepts.hpp:114
Definition FunctionalConcepts.hpp:15
Definition FunctionalConcepts.hpp:27
Definition FunctionalConcepts.hpp:42
Definition FunctionalConcepts.hpp:54
Definition FunctionalConcepts.hpp:63
Definition FunctionalConcepts.hpp:36
Definition FunctionalConcepts.hpp:48
Definition FunctionalConcepts.hpp:66
Definition FunctionalConcepts.hpp:60
Definition FunctionalConcepts.hpp:9
Definition FunctionalConcepts.hpp:21
Definition AlternativeKeyMap.hpp:4
UnaryFunction_t< T, void > Consumer_t
Definition FunctionalConcepts.hpp:57
std::function< T(const T &)> UnaryOperator_t
Definition FunctionalConcepts.hpp:24
std::function< T(const T &, const T &)> BiOperator_t
Definition FunctionalConcepts.hpp:30
std::function< R(const T &, const U &)> BiFunction_t
Definition FunctionalConcepts.hpp:18
std::function< T()> Producer_t
Definition FunctionalConcepts.hpp:51
std::function< ResultType(const RangeType &)> ReduceFunction_t
Definition FunctionalConcepts.hpp:69
std::function< R(const T &)> UnaryFunction_t
Definition FunctionalConcepts.hpp:12
std::function< bool(const T &)> Predicate_t
Definition FunctionalConcepts.hpp:39
std::function< bool(const T &, const R &)> BiPredicate_t
Definition FunctionalConcepts.hpp:45
Definition FunctionalConcepts.hpp:89
constexpr bool operator()(const auto &lhs, const auto &rhs) const noexcept
Definition FunctionalConcepts.hpp:90
Definition FunctionalConcepts.hpp:77
constexpr bool operator()(const auto &t) const noexcept
Definition FunctionalConcepts.hpp:78
Definition FunctionalConcepts.hpp:95
constexpr T operator()(const T &t) const noexcept
Definition FunctionalConcepts.hpp:97
Definition FunctionalConcepts.hpp:102
constexpr void operator()(const auto &t) const noexcept
Definition FunctionalConcepts.hpp:103
Definition FunctionalConcepts.hpp:83
constexpr bool operator()(const auto &lhs, const auto &rhs) const noexcept
Definition FunctionalConcepts.hpp:84
Definition FunctionalConcepts.hpp:71
constexpr bool operator()(const auto &t) const noexcept
Definition FunctionalConcepts.hpp:72