SpECTRE Documentation Coverage Report
Current view: top level - DataStructures/DataBox - TagTraits.hpp Hit Total Coverage
Commit: 3f09028930c0450a2fb61ee918b22882f5d03d2b Lines: 16 17 94.1 %
Date: 2021-10-22 20:52:16
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 <type_traits>
       7             : 
       8             : /// \cond
       9             : namespace db {
      10             : struct SimpleTag;
      11             : struct BaseTag;
      12             : struct ComputeTag;
      13             : struct ReferenceTag;
      14             : }  // namespace db
      15             : /// \endcond
      16             : 
      17             : namespace db {
      18             : /*!
      19             :  * \ingroup DataBoxGroup
      20             :  * \brief Check if `Tag` derives off of db::ComputeTag.
      21             :  *
      22             :  * \see is_compute_tag_v ComputeTag
      23             :  */
      24             : template <typename Tag>
      25           1 : struct is_compute_tag : std::is_base_of<db::ComputeTag, Tag> {};
      26             : 
      27             : /// \ingroup DataBoxGroup
      28             : /// \brief True if `Tag` derives from db::ComputeTag.
      29             : template <typename Tag>
      30           1 : constexpr bool is_compute_tag_v = is_compute_tag<Tag>::value;
      31             : 
      32             : /*!
      33             :  * \ingroup DataBoxGroup
      34             :  * \brief Check if `Tag` derives off of db::ReferenceTag.
      35             :  *
      36             :  * \see is_reference_tag_v ReferenceTag
      37             :  */
      38             : template <typename Tag>
      39           1 : struct is_reference_tag : std::is_base_of<db::ReferenceTag, Tag> {};
      40             : 
      41             : /// \ingroup DataBoxGroup
      42             : /// \brief True if `Tag` derives from db::ReferenceTag.
      43             : template <typename Tag>
      44           1 : constexpr bool is_reference_tag_v = is_reference_tag<Tag>::value;
      45             : 
      46             : /*!
      47             :  * \ingroup DataBoxGroup
      48             :  * \brief Check if `Tag` is a DataBox tag for an immutable item, i.e. a
      49             :  * ComputeTag or ReferenceTag
      50             :  *
      51             :  * \see is_immutable_item_tag_v
      52             :  */
      53             : template <typename Tag>
      54           1 : struct is_immutable_item_tag
      55             :     : std::bool_constant<std::is_base_of_v<db::ReferenceTag, Tag> or
      56             :                          std::is_base_of_v<db::ComputeTag, Tag>> {};
      57             : 
      58             : /// \ingroup DataBoxGroup
      59             : /// \brief True if `Tag` is a DataBox tag for an immutable item, i.e. a
      60             : /// ComputeTag or ReferenceTag.
      61             : template <typename Tag>
      62           1 : constexpr bool is_immutable_item_tag_v = is_immutable_item_tag<Tag>::value;
      63             : 
      64             : /*!
      65             :  * \ingroup DataBoxGroup
      66             :  * \brief Check if `Tag` is a DataBox tag for a mutable item, i.e. a SimpleTag
      67             :  *
      68             :  * \see is_mutable_item_tag_v
      69             :  */
      70             : template <typename Tag>
      71           1 : struct is_mutable_item_tag
      72             :     : std::bool_constant<std::is_base_of_v<db::SimpleTag, Tag> and
      73             :                          not is_compute_tag_v<Tag> and
      74             :                          not is_reference_tag_v<Tag>> {};
      75             : 
      76             : /// \ingroup DataBoxGroup
      77             : /// \brief True if `Tag` is a DataBox tag for a mutable item, i.e. a SimpleTag
      78             : template <typename Tag>
      79           1 : constexpr bool is_mutable_item_tag_v = is_mutable_item_tag<Tag>::value;
      80             : 
      81             : /*!
      82             :  * \ingroup DataBoxGroup
      83             :  * \brief Check if `Tag` is a simple tag.
      84             :  *
      85             :  * \details This is done by deriving from std::true_type if `Tag` is derived
      86             :  * from db::SimpleTag, but not from db::ComputeTag or db::ReferenceTag.
      87             :  *
      88             :  * \see is_simple_tag_v SimpleTag
      89             :  */
      90             : template <typename Tag>
      91           1 : struct is_simple_tag
      92             :     : std::bool_constant<std::is_base_of_v<db::SimpleTag, Tag> and
      93             :                          not is_compute_tag_v<Tag> and
      94             :                          not is_reference_tag_v<Tag>> {};
      95             : 
      96             : /// \ingroup DataBoxGroup
      97             : /// \brief True if `Tag` is a simple tag.
      98             : template <typename Tag>
      99           1 : constexpr bool is_simple_tag_v = is_simple_tag<Tag>::value;
     100             : 
     101             : /*!
     102             :  * \ingroup DataBoxGroup
     103             :  * \brief Check if `Tag` is not a base tag.
     104             :  *
     105             :  * \see is_non_base_tag_v BaseTag
     106             :  */
     107             : template <typename Tag>
     108           1 : struct is_non_base_tag : std::is_base_of<db::SimpleTag, Tag> {};
     109             : 
     110             : /// \ingroup DataBoxGroup
     111             : /// \brief True if `Tag` is not a base tag.
     112             : template <typename Tag>
     113           1 : constexpr bool is_non_base_tag_v = is_non_base_tag<Tag>::value;
     114             : 
     115             : /*!
     116             :  * \ingroup DataBoxGroup
     117             :  * \brief Check if `Tag` is a DataBox tag, i.e. a BaseTag, SimpleTag,
     118             :  * ComputeTag, or ReferenceTag.
     119             :  *
     120             :  * \see is_tag_v
     121             :  */
     122             : template <typename Tag>
     123           1 : struct is_tag : std::bool_constant<std::is_base_of_v<db::SimpleTag, Tag> or
     124             :                                    std::is_base_of_v<db::BaseTag, Tag>> {};
     125             : 
     126             : /// \ingroup DataBoxGroup
     127             : /// \brief True if `Tag` is a DataBox tag.
     128             : template <typename Tag>
     129           1 : constexpr bool is_tag_v = is_tag<Tag>::value;
     130             : 
     131             : /*!
     132             :  * \ingroup DataBoxGroup
     133             :  * \brief Check if `Tag` is a base DataBox tag.
     134             :  *
     135             :  * \see is_base_tag_v BaseTag
     136             :  */
     137             : template <typename Tag>
     138           1 : struct is_base_tag
     139             :     : std::bool_constant<std::is_base_of_v<db::BaseTag, Tag> and
     140             :                          not std::is_base_of_v<db::SimpleTag, Tag>> {};
     141             : 
     142             : /// \ingroup DataBoxGroup
     143             : /// \brief True if `Tag` is a base tag.
     144             : template <typename Tag>
     145           1 : constexpr bool is_base_tag_v = is_base_tag<Tag>::value;
     146             : 
     147             : }  // namespace db

Generated by: LCOV version 1.14