CompositeRandomAccessor.h 888 B

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