@@ -59,6 +59,7 @@ struct tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> {
5959
6060namespace detail {
6161
62+ // / @brief Return element @p i from a 10- or 11-element tuple.
6263template <int i, typename Tuple>
6364MFEM_HOST_DEVICE constexpr auto & tuple_get_extended (Tuple& values)
6465{
@@ -98,6 +99,7 @@ MFEM_HOST_DEVICE constexpr auto& tuple_get_extended(Tuple& values)
9899 MFEM_UNREACHABLE ();
99100}
100101
102+ // / @brief Return const element @p i from a 10- or 11-element tuple.
101103template <int i, typename Tuple>
102104MFEM_HOST_DEVICE constexpr const auto & tuple_get_extended (const Tuple& values)
103105{
@@ -139,6 +141,7 @@ MFEM_HOST_DEVICE constexpr const auto& tuple_get_extended(const Tuple& values)
139141
140142} // namespace detail
141143
144+ // / @brief Return mutable element @p i from a 10-element tuple.
142145template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
143146 typename T8 , typename T9 >
144147MFEM_HOST_DEVICE constexpr auto & get (tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >& values)
@@ -147,6 +150,7 @@ MFEM_HOST_DEVICE constexpr auto& get(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T
147150 return detail::tuple_get_extended<i>(values);
148151}
149152
153+ // / @brief Return mutable element @p i from an 11-element tuple.
150154template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
151155 typename T8 , typename T9 , typename T10 >
152156MFEM_HOST_DEVICE constexpr auto & get (tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >& values)
@@ -155,6 +159,7 @@ MFEM_HOST_DEVICE constexpr auto& get(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T
155159 return detail::tuple_get_extended<i>(values);
156160}
157161
162+ // / @brief Return const element @p i from a 10-element tuple.
158163template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
159164 typename T8 , typename T9 >
160165MFEM_HOST_DEVICE constexpr const auto & get (const tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >& values)
@@ -163,6 +168,7 @@ MFEM_HOST_DEVICE constexpr const auto& get(const tuple<T0, T1, T2, T3, T4, T5, T
163168 return detail::tuple_get_extended<i>(values);
164169}
165170
171+ // / @brief Return const element @p i from an 11-element tuple.
166172template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
167173 typename T8 , typename T9 , typename T10 >
168174MFEM_HOST_DEVICE constexpr const auto & get (const tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >& values)
@@ -171,6 +177,25 @@ MFEM_HOST_DEVICE constexpr const auto& get(const tuple<T0, T1, T2, T3, T4, T5, T
171177 return detail::tuple_get_extended<i>(values);
172178}
173179
180+ /* *
181+ * @brief a function intended to be used for extracting the ith type from a tuple.
182+ *
183+ * @note type<i>(my_tuple) returns a value, whereas get<i>(my_tuple) returns a reference
184+ *
185+ * @tparam i the index of the tuple to query
186+ * @tparam T0 The first type stored in the tuple
187+ * @tparam T1 The second type stored in the tuple
188+ * @tparam T2 The third type stored in the tuple
189+ * @tparam T3 The fourth type stored in the tuple
190+ * @tparam T4 The fifth type stored in the tuple
191+ * @tparam T5 The sixth type stored in the tuple
192+ * @tparam T6 The seventh type stored in the tuple
193+ * @tparam T7 The eighth type stored in the tuple
194+ * @tparam T8 The ninth type stored in the tuple
195+ * @tparam T9 The tenth type stored in the tuple
196+ * @param values the tuple of values
197+ * @return a copy of the ith entry of the input
198+ */
174199template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
175200 typename T8 , typename T9 >
176201MFEM_HOST_DEVICE constexpr auto type (const tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 >& values)
@@ -179,6 +204,26 @@ MFEM_HOST_DEVICE constexpr auto type(const tuple<T0, T1, T2, T3, T4, T5, T6, T7,
179204 return detail::tuple_get_extended<i>(values);
180205}
181206
207+ /* *
208+ * @brief a function intended to be used for extracting the ith type from a tuple.
209+ *
210+ * @note type<i>(my_tuple) returns a value, whereas get<i>(my_tuple) returns a reference
211+ *
212+ * @tparam i the index of the tuple to query
213+ * @tparam T0 The first type stored in the tuple
214+ * @tparam T1 The second type stored in the tuple
215+ * @tparam T2 The third type stored in the tuple
216+ * @tparam T3 The fourth type stored in the tuple
217+ * @tparam T4 The fifth type stored in the tuple
218+ * @tparam T5 The sixth type stored in the tuple
219+ * @tparam T6 The seventh type stored in the tuple
220+ * @tparam T7 The eighth type stored in the tuple
221+ * @tparam T8 The ninth type stored in the tuple
222+ * @tparam T9 The tenth type stored in the tuple
223+ * @tparam T10 The eleventh type stored in the tuple
224+ * @param values the tuple of values
225+ * @return a copy of the ith entry of the input
226+ */
182227template <int i, typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 ,
183228 typename T8 , typename T9 , typename T10 >
184229MFEM_HOST_DEVICE constexpr auto type (const tuple<T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 >& values)
@@ -191,29 +236,32 @@ MFEM_HOST_DEVICE constexpr auto type(const tuple<T0, T1, T2, T3, T4, T5, T6, T7,
191236
192237namespace smith {
193238
194- /* *
195- * @brief Alias for the CUDA-capable MFEM tuple implementation used by Smith.
196- *
197- * Keep Smith's public tuple spelling available while sharing the implementation
198- * with MFEM's future namespace.
199- */
239+ // / @brief Expose MFEM tuple in the Smith namespace.
200240template <typename ... T>
201241using tuple = mfem::future::tuple<T...>;
202242
243+ // / @brief Expose MFEM tuple application in the Smith namespace.
203244using mfem::future::apply;
245+ // / @brief Expose MFEM tuple element access in the Smith namespace.
204246using mfem::future::get;
247+ // / @brief Expose MFEM tuple construction in the Smith namespace.
205248using mfem::future::make_tuple;
249+ // / @brief Expose MFEM tuple type selection in the Smith namespace.
206250using mfem::future::type;
207251
252+ // / @brief Alias for the MFEM tuple size trait.
208253template <class ... Types>
209254using tuple_size = mfem::future::tuple_size<Types...>;
210255
256+ // / @brief Alias for the MFEM tuple element trait.
211257template <size_t I, class T >
212258using tuple_element = mfem::future::tuple_element<I, T>;
213259
260+ // / @brief Alias for the MFEM tuple detection trait.
214261template <typename T>
215262using is_tuple = mfem::future::is_tuple<T>;
216263
264+ // / @brief Alias for the MFEM nested tuple detection trait.
217265template <typename T>
218266using is_tuple_of_tuples = mfem::future::is_tuple_of_tuples<T>;
219267
0 commit comments