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 : #include <string> 8 : 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/DataBox/TagName.hpp" 11 : #include "Utilities/TMPL.hpp" 12 : #include "Utilities/TypeTraits.hpp" 13 : 14 : /// \cond 15 : template <typename TagsList> 16 : class Variables; 17 : /// \endcond 18 : 19 : namespace Tags { 20 : template <typename TagsList> 21 0 : struct Variables : db::SimpleTag { 22 : static_assert(tt::is_a<tmpl::list, TagsList>::value, 23 : "The TagsList passed to Tags::Variables is not a typelist"); 24 0 : using tags_list = TagsList; 25 0 : using type = ::Variables<TagsList>; 26 0 : static std::string name() { 27 : std::string tag_name{"Variables("}; 28 : size_t iter = 0; 29 : tmpl::for_each<TagsList>([&tag_name, &iter](auto tag) { 30 : tag_name += db::tag_name<tmpl::type_from<decltype(tag)>>(); 31 : if (iter + 1 != tmpl::size<TagsList>::value) { 32 : tag_name += ","; 33 : } 34 : iter++; 35 : }); 36 : return tag_name + ")"; 37 : } 38 : }; 39 : } // namespace Tags