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{});
}
};

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

//! 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) {});
}

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

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

Loading…
Cancel
Save