# HG changeset patch # User Chris Cannam # Date 1520586560 0 # Node ID 048ab927a95238e3c1205afe38a58db483cb5fc1 # Parent 944e699a40688cc1b9402ebd228ea6466ef5245c Update base-n code from upstream diff -r 944e699a4068 -r 048ab927a952 ext/base-n/include/basen.hpp --- 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(output_current_bit + ConversionTraits::group_length(), 8) - output_current_bit; + size_t bits_in_current_byte = std::min(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 -