tuple.hpp Source File#
tile/core/container/tuple.hpp
Go to the documentation of this file.
269 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get() const & { TP_COM_(); return impl::getv<I>(*this); }
270 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number<I>) const & { TP_COM_(); return get<I>(); }
271 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get() & { TP_COM_(); return impl::getv<I>(*this); }
272 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number<I>) & { TP_COM_(); return get<I>(); }
273 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get() && { TP_COM_(); return impl::getv<I>(std::move(*this)); }
274 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number<I>) && { TP_COM_(); return std::move(*this).template get<I>(); }
275 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get() const && { TP_COM_(); return impl::getv<I>(std::move(*this)); }
276 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number<I>) const &&{ TP_COM_(); return std::move(*this).template get<I>(); }
278 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) at() const { TP_COM_(); return impl::getv<I>(*this); }
279 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) at(number<I>) const { TP_COM_(); return get<I>(); }
280 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) at() { TP_COM_(); return impl::getv<I>(*this); }
281 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) at(number<I>) { TP_COM_(); return get<I>(); }
283 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) operator[](number<I>) { TP_COM_(); return get<I>(); }
284 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) operator[](number<I>) const { TP_COM_(); return get<I>(); }
285 template<index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) operator()(number<I>) { TP_COM_(); return get<I>(); } // TODO: compatible
288 template <typename Tx> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as() { return reinterpret_cast<tuple_array<Tx, size()>&>(*this); }
289 template <typename Tx> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as() const { return reinterpret_cast<const tuple_array<Tx, size()>&>(*this); }
291 //template <typename Tx> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(index_t i) { TP_COM_(); return reinterpret_cast<tuple_array<Tx, size()>&>(*this).at(i); }
292 //template <typename Tx> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(index_t i) const { TP_COM_(); return reinterpret_cast<const tuple_array<Tx, size()>&>(*this).at(i); }
293 template <typename Tx, index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(number<I>) { TP_COM_(); return reinterpret_cast<tuple_array<Tx, size()>&>(*this).at(number<I>{}); }
294 template <typename Tx, index_t I> CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(number<I>) const { TP_COM_(); return reinterpret_cast<const tuple_array<Tx, size()>&>(*this).at(number<I>{}); }
296 // template <typename Tx> CK_TILE_HOST_DEVICE constexpr void set_as(index_t i, const Tx & x) { TP_COM_(); reinterpret_cast<tuple_array<Tx, size()>&>(*this).at(i) = x; }
297 template <typename Tx, index_t I> CK_TILE_HOST_DEVICE constexpr void set_as(number<I>, const Tx & x) { TP_COM_(); reinterpret_cast<tuple_array<Tx, size()>&>(*this).at(number<I>{}) = x; }
529 return detail::apply_impl(std::forward<F>(f), std::forward<Tuple>(t), make_index_sequence<N>{});
__host__ __device__ constexpr auto depth(const Layout< Shape, UnrolledDescriptorType > &layout)
Get depth of the layout shape (return 0 if scalar).
Definition layout_utils.hpp:371
constexpr decltype(auto) apply_impl(F &&f, Tuple &&t, sequence< Is... >)
Definition tile/core/container/tuple.hpp:497
CK_TILE_HOST_DEVICE constexpr auto transform_tuples_impl(F f, const X &x, sequence< Is... >)
Definition tile/core/container/tuple.hpp:477
CK_TILE_HOST_DEVICE constexpr auto embed_tuples_impl(F f, const X &x, sequence< Is... >)
Definition tile/core/container/tuple.hpp:535
Definition tile/core/arch/amd_buffer_addressing.hpp:110
CK_TILE_HOST_DEVICE constexpr T getv(const tuple_object< I, T, true > &)
Definition tile/core/container/tuple.hpp:95
Definition tile/core/algorithm/cluster_descriptor.hpp:13
constexpr decltype(auto) apply(F &&f, Tuple &&t)
Definition tile/core/container/tuple.hpp:526
CK_TILE_HOST_DEVICE constexpr auto unpack2(F &&f, X &&x, Y &&y)
Definition tile/core/utility/functional.hpp:209
remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
Definition type_traits.hpp:21
CK_TILE_HOST_DEVICE constexpr auto generate_tuple_for(F &&f, sequence< ids... >)
Definition tile/core/container/tuple.hpp:423
constexpr tuple< Args &... > tie(Args &... args) noexcept
Definition tile/core/container/tuple.hpp:376
CK_TILE_HOST_DEVICE constexpr auto operator-=(multi_index< NSize > &y, const X &x)
Definition tile/core/container/multi_index.hpp:47
CK_TILE_HOST_DEVICE constexpr auto operator*(const multi_index< NSize > &a, const T &b)
Definition tile/core/container/multi_index.hpp:75
CK_TILE_HOST_DEVICE constexpr auto tuple_reverse(const tuple< Ts... > &t)
Definition tile/core/container/tuple.hpp:583
typename detail::detector< nonesuch, void, Op, Args... >::value_t is_detected
Definition type_traits.hpp:67
CK_TILE_HOST_DEVICE constexpr auto concat_tuple_of_reference(const tuple< X &... > &tx, const tuple< Y &... > &ty)
Definition tile/core/container/tuple.hpp:443
CK_TILE_HOST_DEVICE constexpr auto operator+(const multi_index< NSize > &a, const T &b)
Definition tile/core/container/multi_index.hpp:55
typename __make_integer_seq< impl::__integer_sequence, index_t, N >::seq_type make_index_sequence
Definition tile/core/container/sequence.hpp:230
CK_TILE_HOST_DEVICE constexpr auto operator-(const multi_index< NSize > &a, const T &b)
Definition tile/core/container/multi_index.hpp:65
CK_TILE_HOST_DEVICE constexpr auto is_nested_tuple(const tuple< Ts... > &)
Definition tile/core/container/tuple.hpp:612
CK_TILE_HOST_DEVICE constexpr auto transform_tuples(F f, const X &x)
Definition tile/core/container/tuple.hpp:505
CK_TILE_HOST_DEVICE constexpr auto tuple_depth(const T &)
Definition tile/core/container/tuple.hpp:618
CK_TILE_HOST_DEVICE constexpr auto generate_tuple(F &&f, number< N >)
Definition tile/core/container/tuple.hpp:429
CK_TILE_HOST_DEVICE constexpr auto generate_tie(F &&f, number< N >)
Definition tile/core/container/tuple.hpp:435
CK_TILE_HOST_DEVICE constexpr auto unpack(F &&f, X &&x)
Definition tile/core/utility/functional.hpp:200
CK_TILE_HOST_DEVICE constexpr auto operator/(sequence< Xs... >, sequence< Ys... >)
Definition tile/core/container/sequence.hpp:737
CK_TILE_HOST_DEVICE constexpr auto concat_tuple(const tuple< X... > &tx, const tuple< Y... > &ty)
Definition tile/core/container/tuple.hpp:453
CK_TILE_HOST_DEVICE constexpr auto unroll_nested_tuple(const tuple<> &t)
Definition tile/core/container/tuple.hpp:554
CK_TILE_HOST_DEVICE constexpr bool operator==(const array< T, Size > &a, const array< T, Size > &b)
Definition tile/core/container/array.hpp:263
CK_TILE_HOST_DEVICE constexpr auto embed_tuples(F f, const X &x)
Definition tile/core/container/tuple.hpp:546
CK_TILE_HOST_DEVICE constexpr auto to_array_of_array(tuple< Seqs... > t_of_s)
Definition tile/core/container/tuple.hpp:630
typename impl::tuple_array_impl< T, N >::type tuple_array
Definition tile/core/container/tuple.hpp:28
decltype(std::declval< T & >().IsTuple()) is_tuple
Definition tile/core/container/tuple.hpp:609
CK_TILE_HOST_DEVICE constexpr auto tuple_reduce(F &&f, const tuple< Ts... > &t)
Definition tile/core/container/tuple.hpp:595
CK_TILE_HOST_DEVICE constexpr auto operator+=(multi_index< NSize > &y, const X &x)
Definition tile/core/container/multi_index.hpp:39
CK_TILE_HOST_DEVICE constexpr auto make_tuple(Xs &&... xs)
Definition tile/core/container/tuple.hpp:360
CK_TILE_HOST_DEVICE constexpr bool operator!=(const array< T, Size > &a, const array< T, Size > &b)
Definition tile/core/container/array.hpp:280
STL namespace.
Definition tile/core/container/sequence.hpp:287
typename std::conditional< kHasContent, type0, type1 >::type type
Definition tile/core/container/sequence.hpp:302
A fixed-size array container similar to std::array with additional utilities.
Definition tile/core/container/array.hpp:43
tuple<> type
Definition tile/core/container/tuple.hpp:412
tuple< T > type
Definition tile/core/container/tuple.hpp:418
Definition tile/core/container/tuple.hpp:404
typename tuple_concat< typename tuple_array_impl< T, N/2 >::type, typename tuple_array_impl< T, N - N/2 >::type >::type type
Definition tile/core/container/tuple.hpp:405
CK_TILE_HOST_DEVICE constexpr tuple_base(U &... u)
Definition tile/core/container/tuple.hpp:149
CK_TILE_HOST_DEVICE constexpr tuple_base(tuple_base< sequence< I... >, U... > &&u)
Definition tile/core/container/tuple.hpp:154
CK_TILE_HOST_DEVICE constexpr tuple_base(tuple_base< sequence< I... >, U... > &u)
Definition tile/core/container/tuple.hpp:166
CK_TILE_HOST_DEVICE constexpr tuple_base(const U &... u)
Definition tile/core/container/tuple.hpp:144
CK_TILE_HOST_DEVICE constexpr tuple_base(const tuple_base< sequence< I... >, U... > &u)
Definition tile/core/container/tuple.hpp:160
CK_TILE_HOST_DEVICE constexpr tuple_base()=default
CK_TILE_HOST_DEVICE constexpr tuple_base(U &&... u)
Definition tile/core/container/tuple.hpp:138
Definition tile/core/container/tuple.hpp:119
CK_TILE_HOST_DEVICE constexpr tuple_object()
Definition tile/core/container/tuple.hpp:68
CK_TILE_HOST_DEVICE constexpr tuple_object(U &&e)
Definition tile/core/container/tuple.hpp:71
T element
Definition tile/core/container/tuple.hpp:90
CK_TILE_HOST_DEVICE constexpr tuple_object(const U &e)
Definition tile/core/container/tuple.hpp:75
CK_TILE_HOST_DEVICE constexpr tuple_object(U &e)
Definition tile/core/container/tuple.hpp:79
CK_TILE_HOST_DEVICE constexpr tuple_object(U &&)
Definition tile/core/container/tuple.hpp:44
CK_TILE_HOST_DEVICE constexpr tuple_object(const U &)
Definition tile/core/container/tuple.hpp:48
CK_TILE_HOST_DEVICE constexpr tuple_object()
Definition tile/core/container/tuple.hpp:41
CK_TILE_HOST_DEVICE constexpr tuple_object(U &)
Definition tile/core/container/tuple.hpp:52
Definition tile/core/container/tuple.hpp:35
Definition tile/core/container/sequence.hpp:49
Definition tile/core/utility/functional.hpp:43
tuple< Xs..., Ys... > type
Definition tile/core/container/tuple.hpp:387
Definition tile/core/container/tuple.hpp:382
Definition tile/core/container/tuple.hpp:192
CK_TILE_HOST_DEVICE constexpr tuple(U &&... u)
Definition tile/core/container/tuple.hpp:207
static CK_TILE_HOST_DEVICE constexpr bool IsTuple()
Definition tile/core/container/tuple.hpp:265
CK_TILE_HOST_DEVICE constexpr decltype(auto) get() &
Definition tile/core/container/tuple.hpp:271
impl::tuple_base< make_index_sequence< sizeof...(T)>, T... > base
Definition tile/core/container/tuple.hpp:195
CK_TILE_HOST_DEVICE constexpr tuple()=default
CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as() const
Definition tile/core/container/tuple.hpp:289
CK_TILE_HOST_DEVICE constexpr decltype(auto) at(number< I >)
Definition tile/core/container/tuple.hpp:281
CK_TILE_HOST_DEVICE constexpr tuple(tuple< U... > &u)
Definition tile/core/container/tuple.hpp:234
CK_TILE_HOST_DEVICE constexpr tuple(U &... u)
Definition tile/core/container/tuple.hpp:217
static CK_TILE_HOST_DEVICE constexpr bool is_static()
Definition tile/core/container/tuple.hpp:254
CK_TILE_HOST_DEVICE constexpr decltype(auto) at(number< I >) const
Definition tile/core/container/tuple.hpp:279
static CK_TILE_HOST_DEVICE constexpr auto size()
Definition tile/core/container/tuple.hpp:194
CK_TILE_HOST_DEVICE constexpr tuple(const U &... u)
Definition tile/core/container/tuple.hpp:212
CK_TILE_HOST_DEVICE constexpr tuple(const tuple< U... > &u)
Definition tile/core/container/tuple.hpp:228
CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(number< I >) const
Definition tile/core/container/tuple.hpp:294
CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number< I >) &
Definition tile/core/container/tuple.hpp:272
CK_TILE_HOST_DEVICE constexpr decltype(auto) at() const
Definition tile/core/container/tuple.hpp:278
CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number< I >) const &&
Definition tile/core/container/tuple.hpp:276
CK_TILE_HOST_DEVICE constexpr tuple(tuple< U... > &&u)
Definition tile/core/container/tuple.hpp:222
CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as()
Definition tile/core/container/tuple.hpp:288
CK_TILE_HOST_DEVICE constexpr decltype(auto) get() const &&
Definition tile/core/container/tuple.hpp:275
CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number< I >) const &
Definition tile/core/container/tuple.hpp:270
CK_TILE_HOST_DEVICE constexpr decltype(auto) get_as(number< I >)
Definition tile/core/container/tuple.hpp:293
CK_TILE_HOST_DEVICE constexpr decltype(auto) get() const &
Definition tile/core/container/tuple.hpp:269
CK_TILE_HOST_DEVICE constexpr decltype(auto) at()
Definition tile/core/container/tuple.hpp:280
CK_TILE_HOST_DEVICE constexpr decltype(auto) get() &&
Definition tile/core/container/tuple.hpp:273
CK_TILE_HOST_DEVICE constexpr decltype(auto) get(number< I >) &&
Definition tile/core/container/tuple.hpp:274
CK_TILE_HOST_DEVICE constexpr void set_as(number< I >, const Tx &x)
Definition tile/core/container/tuple.hpp:297
static constexpr index_t vector_size
Definition tile/core/container/tuple.hpp:328
__type_pack_element< 0, T... > scalar_type
Definition tile/core/container/tuple.hpp:327
Definition vector_type.hpp:90