7#include <dr/concepts/concepts.hpp>
8#include <dr/detail/ranges.hpp>
9#include <dr/detail/ranges_shim.hpp>
20 if (rng::empty(dr::ranges::segments(r))) {
21 dr::drlog.debug(
"unaligned: empty segments\n");
28auto sub_aligned(
auto &&r) {
return true; }
31bool sub_aligned(has_segments
auto &&r1, has_segments
auto &&r2,
33 auto z = rng::views::zip(dr::ranges::segments(r1), dr::ranges::segments(r2));
34 auto i = rng::distance(z) - 1;
36 if (dr::ranges::rank(seg.first) != dr::ranges::rank(seg.second)) {
37 dr::drlog.debug(
"unaligned: ranks: {} {}\n", dr::ranges::rank(seg.first),
38 dr::ranges::rank(seg.second));
43 if (i > 0 && rng::distance(seg.first) != rng::distance(seg.second)) {
44 dr::drlog.debug(
"unaligned: size: {} {}\n", rng::distance(seg.first),
45 rng::distance(seg.second));
51 return sub_aligned(r2, rest...);
55bool sub_aligned(no_segments
auto &&r1, has_segments
auto &&r2,
auto... rest) {
56 return sub_aligned(r2, rest...);
59bool sub_aligned(has_segments
auto &&r1, no_segments
auto &&r2,
61 return sub_aligned(r1, rest...);
66template <
typename... Args>
bool aligned(Args &&...args) {
67 return sub_aligned(std::forward<Args>(args)...);
Definition: alignment.hpp:14
Definition: alignment.hpp:17