#ifndef MYGRATE_HELPERS_H #define MYGRATE_HELPERS_H #include #include #include #include #include namespace MyGrate { template constexpr inline auto bitslice(const I i, uint8_t offset, uint8_t size) { return (i >> offset) & ((1U << size) - 1U); } template constexpr inline auto verify(R expr, P &&... p) { if (!expr) { throw X(std::forward

(p)...); } return expr; } template constexpr inline auto mod100_extract(T & i) { const auto r {i % 100}; i /= 100; return r; } template concept Stringable = requires(T a) { { std::to_string(a) } -> std::same_as; }; template concept Viewable = requires(T a) { { a.data() } -> std::convertible_to; { a.size() } -> std::integral; }; inline const char * getenv(const char * env, const char * dfl) { if (const auto e {::getenv(env)}) { return e; } return dfl; } } #endif