DDC 0.8.0
Loading...
Searching...
No Matches
spline_traits.hpp
1// Copyright (C) The DDC development team, see COPYRIGHT.md file
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <type_traits>
8
9#include <ddc/ddc.hpp>
10
11#include "spline_builder.hpp"
12#include "spline_builder_2d.hpp"
13#include "spline_evaluator.hpp"
14#include "spline_evaluator_2d.hpp"
15
16namespace ddc {
17
18template <class T>
19struct is_spline_builder : std::false_type
20{
21};
22
23template <
24 class ExecSpace,
25 class MemorySpace,
26 class BSplines,
27 class InterpolationDDim,
28 ddc::BoundCond BcLower,
29 ddc::BoundCond BcUpper,
30 SplineSolver Solver>
32 ExecSpace,
33 MemorySpace,
34 BSplines,
35 InterpolationDDim,
36 BcLower,
37 BcUpper,
38 Solver>> : std::true_type
39{
40};
41
42/**
43 * @brief A helper to check if T is a SplineBuilder
44 * @tparam T The type to be checked if is a SplineBuilder
45 */
46template <class T>
47inline constexpr bool is_spline_builder_v = is_spline_builder<T>::value;
48
49template <class T>
50struct is_spline_builder2d : std::false_type
51{
52};
53
54template <
55 class ExecSpace,
56 class MemorySpace,
57 class BSpline1,
58 class BSpline2,
59 class DDimI1,
60 class DDimI2,
61 ddc::BoundCond BcLower1,
62 ddc::BoundCond BcUpper1,
63 ddc::BoundCond BcLower2,
64 ddc::BoundCond BcUpper2,
65 ddc::SplineSolver Solver>
67 ExecSpace,
68 MemorySpace,
69 BSpline1,
70 BSpline2,
71 DDimI1,
72 DDimI2,
73 BcLower1,
74 BcUpper1,
75 BcLower2,
76 BcUpper2,
77 Solver>> : std::true_type
78{
79};
80
81/**
82 * @brief A helper to check if T is a SplineBuilder2D
83 * @tparam T The type to be checked if is a SplineBuilder2D
84 */
85template <class T>
86inline constexpr bool is_spline_builder2d_v = is_spline_builder2d<T>::value;
87
88template <class T>
89struct is_spline_evaluator : std::false_type
90{
91};
92
93template <
94 class ExecSpace,
95 class MemorySpace,
96 class BSplines,
97 class EvaluationDDim,
98 class LowerExtrapolationRule,
99 class UpperExtrapolationRule>
101 ExecSpace,
102 MemorySpace,
103 BSplines,
104 EvaluationDDim,
105 LowerExtrapolationRule,
106 UpperExtrapolationRule>> : std::true_type
107{
108};
109
110/**
111 * @brief A helper to check if T is a SplineEvaluator
112 * @tparam T The type to be checked if is a SplineEvaluator
113 */
114template <class T>
115inline constexpr bool is_spline_evaluator_v = is_spline_evaluator<T>::value;
116
117template <class T>
118struct is_spline_evaluator2d : std::false_type
119{
120};
121
122template <
123 class ExecSpace,
124 class MemorySpace,
125 class BSpline1,
126 class BSpline2,
127 class EvaluationDDim1,
128 class EvaluationDDim2,
129 class LowerExtrapolationRule1,
130 class UpperExtrapolationRule1,
131 class LowerExtrapolationRule2,
132 class UpperExtrapolationRule2>
134 ExecSpace,
135 MemorySpace,
136 BSpline1,
137 BSpline2,
138 EvaluationDDim1,
139 EvaluationDDim2,
140 LowerExtrapolationRule1,
141 UpperExtrapolationRule1,
142 LowerExtrapolationRule2,
143 UpperExtrapolationRule2>> : std::true_type
144{
145};
146
147/**
148 * @brief A helper to check if T is a SplineEvaluator2D
149 * @tparam T The type to be checked if is a SplineEvaluator2D
150 */
151template <class T>
152inline constexpr bool is_spline_evaluator2d_v = is_spline_evaluator2d<T>::value;
153
154template <class Builder, class Evaluator>
155struct is_evaluator_admissible : std::false_type
156{
157};
158
159template <
160 class ExecSpace,
161 class MemorySpace,
162 class BSplines,
163 class InterpolationDDim,
164 ddc::BoundCond BcLower,
165 ddc::BoundCond BcUpper,
166 SplineSolver Solver,
167 class LowerExtrapolationRule,
168 class UpperExtrapolationRule>
171 ExecSpace,
172 MemorySpace,
173 BSplines,
174 InterpolationDDim,
175 BcLower,
176 BcUpper,
177 Solver>,
179 ExecSpace,
180 MemorySpace,
181 BSplines,
182 InterpolationDDim,
183 LowerExtrapolationRule,
184 UpperExtrapolationRule>> : std::true_type
185{
186};
187
188template <
189 class ExecSpace,
190 class MemorySpace,
191 class BSplines1,
192 class BSplines2,
193 class DDimI1,
194 class DDimI2,
195 ddc::BoundCond BcLower1,
196 ddc::BoundCond BcUpper1,
197 ddc::BoundCond BcLower2,
198 ddc::BoundCond BcUpper2,
199 SplineSolver Solver,
200 class LowerExtrapolationRule1,
201 class UpperExtrapolationRule1,
202 class LowerExtrapolationRule2,
203 class UpperExtrapolationRule2>
206 ExecSpace,
207 MemorySpace,
208 BSplines1,
209 BSplines2,
210 DDimI1,
211 DDimI2,
212 BcLower1,
213 BcUpper1,
214 BcLower2,
215 BcUpper2,
216 Solver>,
218 ExecSpace,
219 MemorySpace,
220 BSplines1,
221 BSplines2,
222 DDimI1,
223 DDimI2,
224 LowerExtrapolationRule1,
225 UpperExtrapolationRule1,
226 LowerExtrapolationRule2,
227 UpperExtrapolationRule2>> : std::true_type
228{
229};
230
231/**
232 * @brief A helper to check if SplineEvaluator is admissible for SplineBuilder
233 * @tparam Builder The builder type to be checked if it is admissible for Evaluator
234 * @tparam Evaluator The evaluator type to be checked if it is admissible for Builder
235 */
236template <class Builder, class Evaluator>
237inline constexpr bool is_evaluator_admissible_v
239
240} // namespace ddc
A class for creating a 2D spline approximation of a function.
A class for creating a spline approximation of a function.
A class to evaluate, differentiate or integrate a 2D spline function.
A class to evaluate, differentiate or integrate a spline function.
The top-level namespace of DDC.
constexpr bool is_spline_builder_v
A helper to check if T is a SplineBuilder.
BoundCond
An enum representing a spline boundary condition.
constexpr bool is_spline_evaluator2d_v
A helper to check if T is a SplineEvaluator2D.
SplineSolver
An enum determining the backend solver of a SplineBuilder or SplineBuilder2d.
constexpr bool is_spline_builder2d_v
A helper to check if T is a SplineBuilder2D.
constexpr bool is_spline_evaluator_v
A helper to check if T is a SplineEvaluator.
constexpr bool is_evaluator_admissible_v
A helper to check if SplineEvaluator is admissible for SplineBuilder.