-
Scott Vokes authored
Eliminate some unnecessary comparisons by making the position in the index signed, and treating any negative value as not found, not just ((uint16_t)-1). Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15, so index values with the highest bit set can be used as working space for index optimization on the fly (some day). Use 'if length >= 3' instead of 'length > 2' for the break even point, sinec it makes the intent clearer, and pull the comparison outside of the inner loop. Increase HEATSHRINK_MIN_LOOKAHEAD_BITS to 2, since -l 1 won't compress. Also, eliminate the corresponding MAX #define, since it has to be <= the window size anyway. Use a separate *pt == *pt2 instead of pt[0] == pt2[0] for comparison of the leading byte, which should allow for better branch prediction. Eliminate 'needle_index' in the inner loop -- it's only aliasing 'end'. Also, add comments about the indexing strategy.
Scott Vokes authoredEliminate some unnecessary comparisons by making the position in the index signed, and treating any negative value as not found, not just ((uint16_t)-1). Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15, so index values with the highest bit set can be used as working space for index optimization on the fly (some day). Use 'if length >= 3' instead of 'length > 2' for the break even point, sinec it makes the intent clearer, and pull the comparison outside of the inner loop. Increase HEATSHRINK_MIN_LOOKAHEAD_BITS to 2, since -l 1 won't compress. Also, eliminate the corresponding MAX #define, since it has to be <= the window size anyway. Use a separate *pt == *pt2 instead of pt[0] == pt2[0] for comparison of the leading byte, which should allow for better branch prediction. Eliminate 'needle_index' in the inner loop -- it's only aliasing 'end'. Also, add comments about the indexing strategy.