From a2ef7cb75c619f3219492d7f655078fc8780a8f3 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Sun, 16 Dec 2018 18:06:28 +1100 Subject: [PATCH] encode/number: set the view's remainder at exit --- encode/number.hpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/encode/number.hpp b/encode/number.hpp index 9ee674fe..89eb1044 100644 --- a/encode/number.hpp +++ b/encode/number.hpp @@ -22,18 +22,19 @@ namespace cruft::encode { decode36 (cruft::view &src) { ValueT accum = 0; - for (auto const i: src) { - accum *= 36; - switch (i) { - case '0'...'9': accum += i - '0'; continue; - case 'a'...'z': accum += i - 'a' + 10; continue; - case 'A'...'Z': accum += i - 'A' + 10; continue; - default: - throw std::invalid_argument ("invalid character"); + auto cursor = src.begin (); + for (auto last = src.end (); cursor != last; ++cursor) { + switch (auto i = *cursor; i) { + case '0'...'9': accum = accum * 36 + i - '0'; continue; + case 'a'...'z': accum = accum * 36 + i - 'a' + 10; continue; + case 'A'...'Z': accum = accum * 36 + i - 'A' + 10; continue; } + + break; } + src = { cursor, src.end () }; return accum; }