#ifndef SPROUT_DETAIL_CHAR_CONVERSION_HPP #define SPROUT_DETAIL_CHAR_CONVERSION_HPP #include #include #include #include #include namespace sprout { namespace detail { template inline SPROUT_CONSTEXPR Elem int_to_char(IntType val, int base) { return SPROUT_ASSERT(2 <= base && base <= 36), SPROUT_ASSERT(IntType(0) <= val && val < static_cast(base)), val < 10 ? static_cast('0') + val : static_cast('a') + (val - 10) ; } template inline SPROUT_CONSTEXPR Elem int_to_char(IntType val) { return SPROUT_ASSERT(IntType(0) <= val && val < IntType(10)), static_cast('0') + val ; } template inline SPROUT_CONSTEXPR IntType char_to_int(Elem c, int base) { return sprout::ascii::isdigit(c) && c - static_cast('0') < base ? c - static_cast('0') : sprout::ascii::islower(c) && c - static_cast('a') + 10 < base ? c - static_cast('a') + 10 : sprout::ascii::isupper(c) && c - static_cast('A') + 10 < base ? c - static_cast('A') + 10 : static_cast(-1) ; } template inline SPROUT_CONSTEXPR IntType char_to_int(Elem c) { return sprout::ascii::isdigit(c) ? c - static_cast('0') : static_cast(-1) ; } } // namespace detail } // namespace sprout #endif // #ifndef SPROUT_DETAIL_CHAR_CONVERSION_HPP