diff options
author | clyne <clyne@bitgloo.com> | 2020-07-31 19:31:27 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-31 19:31:27 -0400 |
commit | 18fe8ea65dc5113d53396090e74119ecd0d89a7f (patch) | |
tree | cde7e23ea6cc3cebccba1fbda1291ae60d53d126 | |
parent | 70bb15bd3c953535c0da07061befe8a890f900c9 (diff) |
Fix issues with last bits
-rw-r--r-- | consteval_huffman.hpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/consteval_huffman.hpp b/consteval_huffman.hpp index 34078d4..f66b9d2 100644 --- a/consteval_huffman.hpp +++ b/consteval_huffman.hpp @@ -8,7 +8,7 @@ * Compresses given data at compile-time, while also providing utilities for decoding. * @tparam data Expected to be a null-terminated `char` of data to be compressed. */ -template<auto data> +template<const char *data> class huffman_compress { using size_t = unsigned long int; @@ -122,7 +122,11 @@ private: { auto tree = build_node_tree(); size_t bytes = size(); - int bits = 8 - output_size().second; + int bits; + if (auto bitscount = output_size().second; bitscount > 0) + bits = 8 - bitscount; + else + bits = 0, bytes--; for (size_t i = std::char_traits<char>::length(data); i > 0; i--) { auto leaf = std::find_if(tree.begin(), tree.begin() + tree_count(), [c = data[i - 1]](auto& n) { return n.value == c; }); @@ -183,7 +187,7 @@ public: // Checks if another byte is available operator bool() const { - return m_pos < (m_data.size() - 1) || m_bit >= (8 - m_data.lastbitscount()); + return m_pos < (m_data.size() - 1) || m_bit > (8 - m_data.lastbitscount()); } // Gets the current byte int operator*() const { return m_current; } |