Mercurial > hg > piper-cpp
changeset 258:048ab927a952
Update base-n code from upstream
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Fri, 09 Mar 2018 09:09:20 +0000 |
parents | 944e699a4068 |
children | b10018fcd5eb |
files | ext/base-n/include/basen.hpp |
diffstat | 1 files changed, 16 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/ext/base-n/include/basen.hpp Fri Feb 02 11:44:57 2018 +0000 +++ b/ext/base-n/include/basen.hpp Fri Mar 09 09:09:20 2018 +0000 @@ -52,28 +52,28 @@ namespace impl { -const int ERROR = -1; +const int Error = -1; namespace { -char extract_partial_bits(char value, unsigned int start_bit, unsigned int bits_count) +char extract_partial_bits(char value, size_t start_bit, size_t bits_count) { assert(start_bit + bits_count < 8); // shift extracted bits to the beginning of the byte char t1 = value >> (8 - bits_count - start_bit); // mask out bits on the left - char t2 = t1 & ~(-1U << bits_count); + char t2 = t1 & ~(0xff << bits_count); return t2; } -char extract_overlapping_bits(char previous, char next, unsigned int start_bit, unsigned int bits_count) +char extract_overlapping_bits(char previous, char next, size_t start_bit, size_t bits_count) { assert(start_bit + bits_count < 16); - int bits_count_in_previous = 8 - start_bit; - int bits_count_in_next = bits_count - bits_count_in_previous; + size_t bits_count_in_previous = 8 - start_bit; + size_t bits_count_in_next = bits_count - bits_count_in_previous; char t1 = previous << bits_count_in_next; - char t2 = next >> (8 - bits_count_in_next) & ~(-1U << bits_count_in_next) ; - return (t1 | t2) & ~(-1U << bits_count); + char t2 = next >> (8 - bits_count_in_next) & ~(0xff << bits_count_in_next) ; + return (t1 | t2) & ~(0xff << bits_count); } } @@ -99,7 +99,7 @@ } else if (c >= 'A' && c <= 'F') { return c - 'A' + 10; } - return ERROR; + return Error; } }; @@ -124,7 +124,7 @@ } else if (c >= '2' && c <= '7') { return c - '2' + 26; } - return ERROR; + return Error; } }; @@ -156,7 +156,7 @@ } else if (c == '/') { return c - '/' + alph_len * 2 + 11; } - return ERROR; + return Error; } }; @@ -164,7 +164,7 @@ void decode(Iter1 start, Iter1 end, Iter2 out) { Iter1 iter = start; - int output_current_bit = 0; + size_t output_current_bit = 0; char buffer = 0; while (iter != end) { @@ -173,12 +173,12 @@ continue; } char value = ConversionTraits::decode(*iter); - if (value == ERROR) { + if (value == Error) { // malformed data, but let's go on... ++iter; continue; } - unsigned int bits_in_current_byte = std::min<int>(output_current_bit + ConversionTraits::group_length(), 8) - output_current_bit; + size_t bits_in_current_byte = std::min<size_t>(output_current_bit + ConversionTraits::group_length(), 8) - output_current_bit; if (bits_in_current_byte == ConversionTraits::group_length()) { // the value fits within current byte, so we can extract it directly buffer |= value << (8 - output_current_bit - ConversionTraits::group_length()); @@ -191,7 +191,7 @@ } } else { // the value spans across the current and the next byte - int bits_in_next_byte = ConversionTraits::group_length() - bits_in_current_byte; + size_t bits_in_next_byte = ConversionTraits::group_length() - bits_in_current_byte; // fill the current byte and flush it to our output buffer |= value >> bits_in_next_byte; *out++ = buffer; @@ -209,7 +209,7 @@ void encode(Iter1 start, Iter1 end, Iter2 out) { Iter1 iter = start; - int start_bit = 0; + size_t start_bit = 0; bool has_backlog = false; char backlog = 0; @@ -287,4 +287,3 @@ } // bn #endif // BASEN_HPP -