Browse Source

feat(core): add array_skip

GitOrigin-RevId: ae0d12fbb8
tags/v1.0.0-rc1
Megvii Engine Team 4 years ago
parent
commit
074645d82e
1 changed files with 13 additions and 0 deletions
  1. +13
    -0
      src/core/include/megbrain/utils/metahelper_basic.h

+ 13
- 0
src/core/include/megbrain/utils/metahelper_basic.h View File

@@ -99,6 +99,13 @@ namespace metahelper_detail {
return else_(if_constexpr_identity{}); return else_(if_constexpr_identity{});
} }
}; };

template <size_t skip, typename T, size_t isize, size_t... I>
decltype(auto) array_skip_impl(const std::array<T, isize>& arr,
std::index_sequence<I...>) {
static_assert(isize > skip, "invalid argument `skip`");
return std::forward_as_tuple(arr[I + skip]...);
}
} // namespace metahelper_detail } // namespace metahelper_detail


//! construct index_sequence<0..N-1> //! construct index_sequence<0..N-1>
@@ -344,6 +351,12 @@ decltype(auto) if_constexpr(Then&& then) {
return if_constexpr<Cond>(std::forward<Then>(then), [](auto) {}); return if_constexpr<Cond>(std::forward<Then>(then), [](auto) {});
} }


template <size_t skip, typename T, size_t isize>
decltype(auto) array_skip(const std::array<T, isize>& arr) {
return metahelper_detail::array_skip_impl<skip>(
arr, std::make_index_sequence<isize - skip>{});
}

} // namespace mgb } // namespace mgb


// vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}}

Loading…
Cancel
Save