|
#pragma once |
|
|
|
#include <ATen/native/CompositeRandomAccessorCommon.h> |
|
|
|
namespace at { namespace native { |
|
|
|
struct TupleInfoCPU { |
|
template <typename ...Types> |
|
using tuple = std::tuple<Types...>; |
|
|
|
template <typename ...Types> |
|
static constexpr auto tie(Types&... args) noexcept { |
|
return std::tie(args...); |
|
} |
|
}; |
|
|
|
template <typename KeyAccessor, typename ValueAccessor> |
|
using CompositeRandomAccessorCPU = |
|
CompositeRandomAccessor<KeyAccessor, ValueAccessor, TupleInfoCPU>; |
|
|
|
template <typename Values, typename References> |
|
void swap( |
|
references_holder<Values, References> rh1, |
|
references_holder<Values, References> rh2 |
|
) { |
|
return std::swap(rh1.data(), rh2.data()); |
|
} |
|
|
|
template <int N, typename Values, typename References> |
|
auto get(references_holder<Values, References> rh) -> decltype(std::get<N>(rh.data())) { |
|
return std::get<N>(rh.data()); |
|
} |
|
|
|
}} |
|
|