Fix #59: Unreachable code warning in the padder class.
authorJakob Petsovits <jpetso@gmx.at>
Sun, 25 Nov 2018 04:26:37 +0000 (23:26 -0500)
committerJakob Petsovits <jpetso@gmx.at>
Sun, 25 Nov 2018 05:01:22 +0000 (00:01 -0500)
commitd3cab2d3299a5dbc0beb9aa3a0909cf35a8b9425
treef643e2e624ae2df99cebd2381840c7f8a7387dc5
parent26ae52814208f70d12db8596aa2ac600beb78a87
Fix #59: Unreachable code warning in the padder class.

By taking the padding character put call out of the tail() function
and appending it after the tail() call in encode(), the compiler
will work with a more limited set of numbers known at runtime
instead of a slightly longer list of consecutive numbers at
compile time. The code paths that would cause an unreachable code
warning are now actually removed and would also be impossible
to tell in advance by the compiler.

Code sizes remain the same for clang as well as gcc in all
but debug builds, where they only marginally differ.

What's weird is that this change makes my GCC 8.2 release build
perform better on the "Decoding to vector<uint8_t>" benchmark -
weird because none of the changed code is called by any decode()
code paths. But hey, I'll take it. Average time for this task
go down from approx. 67 microseconds for the size 32768 buffer
to approx. 54 microseconds on my machine. Clang appears unaffected.
cppcodec/detail/stream_codec.hpp