diff options
Diffstat (limited to 'include/o3tl/numeric.hxx')
-rw-r--r-- | include/o3tl/numeric.hxx | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/include/o3tl/numeric.hxx b/include/o3tl/numeric.hxx index 9980319a648b..5a6b4b17858b 100644 --- a/include/o3tl/numeric.hxx +++ b/include/o3tl/numeric.hxx @@ -7,22 +7,39 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_O3TL_NUMERIC_HXX -#define INCLUDED_O3TL_NUMERIC_HXX - +#pragma once #include <stdexcept> +#include <o3tl/concepts.hxx> namespace o3tl { - struct divide_by_zero final : public std::runtime_error + +struct divide_by_zero final : public std::runtime_error +{ + explicit divide_by_zero() + : std::runtime_error("divide by zero") { - explicit divide_by_zero() - : std::runtime_error("divide by zero") - { - } - }; + } +}; + +template <o3tl::integral T, o3tl::integral U> +constexpr T convertToHex(U aChar) +{ + if (aChar >= '0' && aChar <= '9') + return T(aChar - '0'); + else if (aChar >= 'a' && aChar <= 'f') + return T(aChar - 'a' + 10); + else if (aChar >= 'A' && aChar <= 'F') + return T(aChar - 'A' + 10); + return T(-1); } -#endif +template <o3tl::integral T, o3tl::integral U> +constexpr T convertToHex(U cHigh, U cLow) +{ + return (o3tl::convertToHex<T>(cHigh) << 4) | o3tl::convertToHex<T>(cLow); +} + +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |