From f8c0bc3d1cbb93169be6d515b6833fc16510a301 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Fri, 12 Oct 2018 19:38:58 +0100 Subject: [PATCH] Hardcode -'0' subtraction. --- include/duckhandy/int_conv.hpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/include/duckhandy/int_conv.hpp b/include/duckhandy/int_conv.hpp index c8fa5c2..ec3d7df 100644 --- a/include/duckhandy/int_conv.hpp +++ b/include/duckhandy/int_conv.hpp @@ -133,25 +133,32 @@ namespace dhandy { using RetType = ReversedSizedArray().to_digit(1))>, implem::int_info::max_len + 1>; using Num = implem::NumberAdaptation; - const constexpr char lookup[201] = "000102030405060708091011121314" - "1516171819202122232425262728293031323334353637383940414243" - "4445464748495051525354555657585960616263646566676869707172" - "737475767778798081828384858687888990919293949596979899"; + const constexpr char lookup[200] = { + 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,1,0,1,1,1,2,1,3,1,4, + 1,5,1,6,1,7,1,8,1,9,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9, + 3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,4,0,4,1,4,2,4,3,4,4, + 4,5,4,6,4,7,4,8,4,9,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9, + 6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,7,0,7,1,7,2,7,3,7,4, + 7,5,7,6,7,7,7,8,7,9,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9, + 9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9 + }; const bool was_negative = implem::is_negative(in); RetType arr; arr.push_front('\0'); while (Num::abs(in) >= static_cast(100)) { - arr.push_front(Tr::to_digit(static_cast(lookup[(Num::abs(in) % 100) * 2 + 1] - '0'))); - arr.push_front(Tr::to_digit(static_cast(lookup[(Num::abs(in) % 100) * 2 + 0] - '0'))); + const auto index = (Num::abs(in) % 100) * 2; + arr.push_front(Tr::to_digit(static_cast(lookup[index + 1]))); + arr.push_front(Tr::to_digit(static_cast(lookup[index + 0]))); in = static_cast(in / static_cast(100)); }; if (Num::abs(in) < static_cast(10)) { arr.push_front(Tr::to_digit(static_cast(Num::abs(in)))); } else { - arr.push_front(Tr::to_digit(static_cast(lookup[Num::abs(in) * 2 + 1] - '0'))); - arr.push_front(Tr::to_digit(static_cast(lookup[Num::abs(in) * 2 + 0] - '0'))); + const auto index = Num::abs(in) * 2; + arr.push_front(Tr::to_digit(static_cast(lookup[index + 1]))); + arr.push_front(Tr::to_digit(static_cast(lookup[index + 0]))); } if (was_negative) arr.push_front(Tr::Minus);