#pragma once #include #include #include #include "Encoding.hh" namespace phosg { template constexpr IntT gcd(IntT a, IntT b) { while (b != 0) { IntT m = a % b; a = b; b = m; } return a; } template constexpr std::pair reduce_fraction(IntT a, IntT b) { IntT denom = gcd(a, b); return std::make_pair(a / denom, b / denom); } template constexpr IntT log2i(IntT v) { return (sizeof(IntT) << 3) - 1 - __builtin_clz(v); } } // namespace phosg