summaryrefslogtreecommitdiff
path: root/include/o3tl/numeric.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/o3tl/numeric.hxx')
-rw-r--r--include/o3tl/numeric.hxx37
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: */