#ifndef GPU_INTEL_JIT_UTILS_RANGE_HPP
#define GPU_INTEL_JIT_UTILS_RANGE_HPP
#include "gpu/intel/jit/utils/iterator.hpp"
namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace jit {
template <typename Fn>
struct filter_range_t {
Fn fn;
};
template <typename Fn>
filter_range_t<Fn> filter(Fn fn) {
return {std::move(fn)};
}
template <typename IterT, typename Fn>
auto operator|(const IterT &iter,
const filter_range_t<Fn> &fn) -> decltype(filter(iter, fn.fn)) {
return filter(iter, fn.fn);
}
template <typename Fn>
struct transform_range_t {
Fn fn;
};
template <typename Fn>
transform_range_t<Fn> transform(Fn fn) {
return {fn};
}
template <typename IterT, typename Fn>
auto operator|(const IterT &iter,
const transform_range_t<Fn> &fn) -> decltype(transform(iter, fn.fn)) {
return transform(iter, fn.fn);
}
} } } } }
#endif