xref: /aosp_15_r20/external/pytorch/aten/src/ATen/native/CompositeRandomAccessor.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #pragma once
2 
3 #include <ATen/native/CompositeRandomAccessorCommon.h>
4 
5 namespace at::native {
6 
7 struct TupleInfoCPU {
8   template <typename ...Types>
9   using tuple = std::tuple<Types...>;
10 
11   template <typename ...Types>
tieTupleInfoCPU12   static constexpr auto tie(Types&... args) noexcept {
13     return std::tie(args...);
14   }
15 };
16 
17 template <typename KeyAccessor, typename ValueAccessor>
18 using CompositeRandomAccessorCPU =
19   CompositeRandomAccessor<KeyAccessor, ValueAccessor, TupleInfoCPU>;
20 
21 template <typename Values, typename References>
swap(references_holder<Values,References> rh1,references_holder<Values,References> rh2)22 void swap(
23   references_holder<Values, References> rh1,
24   references_holder<Values, References> rh2
25 ) {
26   return std::swap(rh1.data(), rh2.data());
27 }
28 
29 template <int N, typename Values, typename References>
30 auto get(references_holder<Values, References> rh) -> decltype(std::get<N>(rh.data())) {
31   return std::get<N>(rh.data());
32 }
33 
34 } // namespace at::native
35