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