kyopro library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Chipppppppppp/kyopro

:warning: kpr/template/rep_macro.hpp

Required by

Code

#pragma once
#include <type_traits>

#define KYOPRO_OVERLOAD_REP(_1, _2, _3, name, ...) name

#define KYOPRO_REP0() for (; ; )
#define KYOPRO_REP1(last) KYOPRO_REP2(KYOPRO_COUNTER, last)
#define KYOPRO_REP2(i, last) for (std::decay_t<decltype(last)> i{}, KYOPRO_LAST{last}; (i) != (KYOPRO_LAST); ++(i))
#define KYOPRO_REP3(i, first, last) for (std::common_type_t<std::decay_t<decltype(first)>, std::decay_t<decltype(last)>> i{first}, KYOPRO_LAST{last}; (i) != (KYOPRO_LAST); ++(i))

#define rep(...) KYOPRO_OVERLOAD_REP(__VA_ARGS__ __VA_OPT__(,) KYOPRO_REP3, KYOPRO_REP2, KYOPRO_REP1, KYOPRO_REP0)(__VA_ARGS__)

namespace kpr::helper {
    template<class T>
    constexpr auto prev(T x) noexcept {
        return --x;
    }
} // namespace kpr::helper

#define KYOPRO_RREP0() for (; ; )
#define KYOPRO_RREP1(last) KYOPRO_RREP2(KYOPRO_COUNTER, last)
#define KYOPRO_RREP2(i, last) for (std::decay_t<decltype(last)> i{kpr::helper::prev(last)}, KYOPRO_FIRST{}; (i) != (KYOPRO_FIRST); --(i))
#define KYOPRO_RREP3(i, first, last) for (std::common_type_t<std::decay_t<decltype(first)>, std::decay_t<decltype(last)>> i{kpr::helper::prev(last)}, KYOPRO_FIRST{kpr::helper::prev(first)}; (i) != (KYOPRO_FIRST); --(i))

#define rrep(...) KYOPRO_OVERLOAD_REP(__VA_ARGS__ __VA_OPT__(,) KYOPRO_RREP3, KYOPRO_RREP2, KYOPRO_RREP1, KYOPRO_RREP0)(__VA_ARGS__)
#line 2 "kpr/template/rep_macro.hpp"
#include <type_traits>

#define KYOPRO_OVERLOAD_REP(_1, _2, _3, name, ...) name

#define KYOPRO_REP0() for (; ; )
#define KYOPRO_REP1(last) KYOPRO_REP2(KYOPRO_COUNTER, last)
#define KYOPRO_REP2(i, last) for (std::decay_t<decltype(last)> i{}, KYOPRO_LAST{last}; (i) != (KYOPRO_LAST); ++(i))
#define KYOPRO_REP3(i, first, last) for (std::common_type_t<std::decay_t<decltype(first)>, std::decay_t<decltype(last)>> i{first}, KYOPRO_LAST{last}; (i) != (KYOPRO_LAST); ++(i))

#define rep(...) KYOPRO_OVERLOAD_REP(__VA_ARGS__ __VA_OPT__(,) KYOPRO_REP3, KYOPRO_REP2, KYOPRO_REP1, KYOPRO_REP0)(__VA_ARGS__)

namespace kpr::helper {
    template<class T>
    constexpr auto prev(T x) noexcept {
        return --x;
    }
} // namespace kpr::helper

#define KYOPRO_RREP0() for (; ; )
#define KYOPRO_RREP1(last) KYOPRO_RREP2(KYOPRO_COUNTER, last)
#define KYOPRO_RREP2(i, last) for (std::decay_t<decltype(last)> i{kpr::helper::prev(last)}, KYOPRO_FIRST{}; (i) != (KYOPRO_FIRST); --(i))
#define KYOPRO_RREP3(i, first, last) for (std::common_type_t<std::decay_t<decltype(first)>, std::decay_t<decltype(last)>> i{kpr::helper::prev(last)}, KYOPRO_FIRST{kpr::helper::prev(first)}; (i) != (KYOPRO_FIRST); --(i))

#define rrep(...) KYOPRO_OVERLOAD_REP(__VA_ARGS__ __VA_OPT__(,) KYOPRO_RREP3, KYOPRO_RREP2, KYOPRO_RREP1, KYOPRO_RREP0)(__VA_ARGS__)
Back to top page