Skip to content
Snippets Groups Projects
  1. May 11, 2015
  2. Jun 25, 2014
    • Scott Vokes's avatar
      Fix possible state yielding MORE from finish(), but 0 bytes from poll(). · 06d4094c
      Scott Vokes authored
      If the decompression stream was terminated with a 1 bit at exactly the
      byte boundary (perhaps due to decompressing from flash memory and
      sinking erased 0xFF bytes until the end of a flash page), it could end
      up in a state where heatshrink_decoder_finish() would return
      HSDR_FINISH_MORE, but calling heatshrink_decoder_poll would always yield
      0 bytes of output. If _both_ results were not checked, this could lead to
      the code driving them uselessly calling them in a loop.
      
      Added regression test case:
      decoder_should_not_get_stuck_with_finish_yielding_MORE_but_0_bytes_output_from_poll
      
      Resolved by explicitly checking remaining input length in
      heatshrink_decoder_finish in the HSDS_YIELD_LITERAL state, since it is
      not safe to assume that the decompression stream input will be padded
      with 0 bits.
      06d4094c
  3. Dec 28, 2013
    • Scott Vokes's avatar
      Improve throughput of encoder. Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15. · 429d41e4
      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.
      429d41e4
  4. Dec 21, 2013
  5. Dec 19, 2013
  6. Aug 30, 2013
  7. May 13, 2013
  8. May 12, 2013
  9. Mar 13, 2013
Loading