Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : 8 : #include "Utilities/TMPL.hpp" 9 : 10 : namespace db { 11 : /// \ingroup DataBoxGroup 12 : /// Struct that can be specialized to allow DataBox items to have 13 : /// subitems. Specializations must define: 14 : /// * `using type = tmpl::list<...>` listing the subtags of `Tag` 15 : /// * A static member function to initialize a subitem of a simple 16 : /// item: 17 : /// ``` 18 : /// template <typename Subtag> 19 : /// static void create_item( 20 : /// const gsl::not_null<typename Tag::type*> parent_value, 21 : /// const gsl::not_null<typename Subtag::type*> sub_value); 22 : /// ``` 23 : /// Mutating the subitems must also modify the main item. 24 : /// * A static member function evaluating a subitem of a compute 25 : /// item: 26 : /// ``` 27 : /// template <typename Subtag> 28 : /// static typename Subtag::type create_compute_item( 29 : /// typename Tag::type& parent_value); 30 : /// ``` 31 : template <typename Tag, typename = std::nullptr_t> 32 1 : struct Subitems { 33 0 : using type = tmpl::list<>; 34 : }; 35 : } // namespace db