SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/Initialization - MutateAssign.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 50.0 % 2 1
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <utility>
       7              : 
       8              : #include "DataStructures/DataBox/DataBox.hpp"
       9              : #include "Utilities/Gsl.hpp"
      10              : #include "Utilities/TMPL.hpp"
      11              : 
      12              : namespace Initialization {
      13              : namespace detail {
      14              : template <typename... MutateTags, typename BoxTags, typename... Args>
      15              : SPECTRE_ALWAYS_INLINE constexpr void mutate_assign_impl(
      16              :     // NOLINTNEXTLINE(readability-avoid-const-params-in-decls)
      17              :     const gsl::not_null<db::DataBox<BoxTags>*> box,
      18              :     tmpl::list<MutateTags...> /*meta*/, Args&&... args) {
      19              :   static_assert(sizeof...(MutateTags) == sizeof...(args),
      20              :                 "The number of arguments passed to `mutate_assign` must be "
      21              :                 "equal to the number of tags passed.");
      22              :   db::mutate<MutateTags...>(
      23              :       [&args...](const auto... box_args) {
      24              :         // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-array-to-pointer-decay)
      25              :         EXPAND_PACK_LEFT_TO_RIGHT((*box_args = std::forward<Args>(args)));
      26              :       },
      27              :       box);
      28              : }
      29              : }  // namespace detail
      30              : 
      31              : /*!
      32              :  * \ingroup DataBoxGroup
      33              :  * \brief Perform a mutation to the \ref DataBoxGroup `box`, assigning the
      34              :  * `args` to the tags in `MutateTagList` in order.
      35              :  */
      36              : template <typename MutateTagList, typename BoxTags, typename... Args>
      37            1 : SPECTRE_ALWAYS_INLINE constexpr void mutate_assign(
      38              :     // NOLINTNEXTLINE(readability-avoid-const-params-in-decls)
      39              :     const gsl::not_null<db::DataBox<BoxTags>*> box, Args&&... args) {
      40              :   // The impl works for zero tags, but we can skip it to improve
      41              :   // compilation performance.
      42              :   if constexpr (tmpl::size<MutateTagList>::value != 0) {
      43              :     detail::mutate_assign_impl(box, MutateTagList{},
      44              :                                std::forward<Args>(args)...);
      45              :   } else {
      46              :     (void)box;
      47              :     expand_pack(args...);
      48              :   }
      49              : }
      50              : }  // namespace Initialization
        

Generated by: LCOV version 2.0-1