mesytec-mnode/external/taskflow-3.8.0/taskflow/utility/iterator.hpp

27 lines
978 B
C++
Raw Permalink Normal View History

2025-01-04 01:25:05 +01:00
#pragma once
#include <cstddef>
#include <type_traits>
namespace tf {
template <typename B, typename E, typename S>
constexpr std::enable_if_t<std::is_integral<std::decay_t<B>>::value &&
std::is_integral<std::decay_t<E>>::value &&
std::is_integral<std::decay_t<S>>::value, bool>
is_range_invalid(B beg, E end, S step) {
return ((step == 0 && beg != end) ||
(beg < end && step <= 0) || // positive range
(beg > end && step >= 0)); // negative range
}
template <typename B, typename E, typename S>
constexpr std::enable_if_t<std::is_integral<std::decay_t<B>>::value &&
std::is_integral<std::decay_t<E>>::value &&
std::is_integral<std::decay_t<S>>::value, size_t>
distance(B beg, E end, S step) {
return (end - beg + step + (step > 0 ? -1 : 1)) / step;
}
} // end of namespace tf -----------------------------------------------------