Program Listing for File Utility.hpp¶
↰ Return to documentation for file (include\SimplifyLine\Utility.hpp
)
#ifndef SIMPLIFYLINE_UTILITY
#define SIMPLIFYLINE_UTILITY
#include <utility>
#include <type_traits>
namespace SimplifyLine {
namespace Utility {
// template <unsigned int i, unsigned int end>
// struct static_for {
// template <typename Lambda>
// void operator()(const Lambda& function) const {
// if (i < end) {
// function(std::integral_constant<int, i>{});
// static_for<i + 1, end>(function);
// }
// }
// };
// template <unsigned N> struct faux_unroll {
// template <typename F> static void call(F const& f) {
// f(std::integral_constant<int, N-1>{});
// faux_unroll<N-1>::call(f);
// }
// };
// template <> struct faux_unroll<0u> {
// template <typename F> static void call(F const&) {}
// };
template <unsigned N, unsigned M=N> struct faux_unroll {
template <typename F> static void call(F const& f) {
f(std::integral_constant<int, M>{} - std::integral_constant<int, N>{});
faux_unroll<N-1, M>::call(f);
}
};
template <> struct faux_unroll<0u,3u> {
template <typename F> static void call(F const& ) {}
};
template <> struct faux_unroll<0u,2u> {
template <typename F> static void call(F const& ) {}
};
} // namespace Utility
} // namespace SimplifyLine
#endif