Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <type_traits>
7 :
8 : #include "Utilities/TMPL.hpp"
9 :
10 : namespace elliptic {
11 : namespace detail {
12 : struct NoModifyBoundaryData {
13 : using argument_tags = tmpl::list<>;
14 : using argument_tags_linearized = tmpl::list<>;
15 : using const_global_cache_tags = tmpl::list<>;
16 : };
17 : } // namespace detail
18 :
19 : /// The `argument_tags` of the `System::modify_boundary_data`, or an empty list
20 : /// if `System::modify_boundary_data` is `void`.
21 : template <typename System>
22 1 : using get_modify_boundary_data = tmpl::conditional_t<
23 : std::is_same_v<typename System::modify_boundary_data, void>,
24 : detail::NoModifyBoundaryData, typename System::modify_boundary_data>;
25 :
26 : template <typename System, bool Linearized>
27 0 : using get_modify_boundary_data_args_tags = tmpl::conditional_t<
28 : Linearized,
29 : typename get_modify_boundary_data<System>::argument_tags_linearized,
30 : typename get_modify_boundary_data<System>::argument_tags>;
31 :
32 : template <typename System, bool Linearized>
33 0 : using get_modify_boundary_data_const_global_cache_tags =
34 : typename get_modify_boundary_data<System>::const_global_cache_tags;
35 :
36 : } // namespace elliptic
|