limes 3.1.0
Composable Calculus Expressions for C++20
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <concepts>
4#include <type_traits>
5
7
8// Fundamental algebraic concept: a type supporting field operations
9template<typename T>
10concept Field = requires(T a, T b) {
11 { a + b } -> std::convertible_to<T>;
12 { a - b } -> std::convertible_to<T>;
13 { a * b } -> std::convertible_to<T>;
14 { a / b } -> std::convertible_to<T>;
15 { -a } -> std::convertible_to<T>;
16 { T(0) };
17 { T(1) };
18};
19
20// A callable that accepts a single argument of type T
21template<typename F, typename T>
22concept UnivariateFunction = std::invocable<F, T>;
23
24// Accumulator: incremental summation with operator+=, operator(), and default/value construction
25template<typename A, typename T>
26concept Accumulator = requires(A acc, T value) {
27 { acc += value } -> std::same_as<A&>;
28 { acc() } -> std::convertible_to<T>;
29 { A{} };
30 { A{T{}} };
31};
32
33// Integration result: value, error, iteration count, and conversion to T
34template<typename R, typename T>
35concept IntegrationResult = requires(R result) {
36 { result.value() } -> std::convertible_to<T>;
37 { result.error() } -> std::convertible_to<T>;
38 { result.iterations() } -> std::convertible_to<std::size_t>;
39 { static_cast<T>(result) } -> std::convertible_to<T>;
40};
41
42// Quadrature rule: fixed set of nodes and weights on [-1, 1]
43template<typename Q, typename T>
44concept QuadratureRule = requires(Q rule) {
45 typename Q::value_type;
46 typename Q::size_type;
47 { rule.size() } -> std::convertible_to<std::size_t>;
48 { rule.weight(std::size_t{}) } -> std::convertible_to<T>;
49 { rule.abscissa(std::size_t{}) } -> std::convertible_to<T>;
50};
51
52// Integrator: a type with value_type and a result_type satisfying IntegrationResult
53template<typename I, typename T>
54concept Integrator = requires {
55 typename I::value_type;
56 typename I::result_type;
58};
59
60} // namespace limes::algorithms::concepts