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