mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
adler32 optimization #818
This commit is contained in:
parent
5893634906
commit
2d9ef055d5
|
@ -302,7 +302,8 @@ CLASS lcl_hash IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD adler32.
|
METHOD adler32.
|
||||||
|
|
||||||
CONSTANTS: lc_adler TYPE i VALUE 65521.
|
CONSTANTS: lc_adler TYPE i VALUE 65521,
|
||||||
|
lc_max_b TYPE i VALUE 1800000000.
|
||||||
|
|
||||||
DATA: lv_index TYPE i,
|
DATA: lv_index TYPE i,
|
||||||
lv_a TYPE i VALUE 1,
|
lv_a TYPE i VALUE 1,
|
||||||
|
@ -316,10 +317,22 @@ CLASS lcl_hash IMPLEMENTATION.
|
||||||
DO xstrlen( iv_xstring ) TIMES.
|
DO xstrlen( iv_xstring ) TIMES.
|
||||||
lv_index = sy-index - 1.
|
lv_index = sy-index - 1.
|
||||||
|
|
||||||
lv_a = ( lv_a + iv_xstring+lv_index(1) ) MOD lc_adler.
|
lv_a = lv_a + iv_xstring+lv_index(1).
|
||||||
lv_b = ( lv_b + lv_a ) MOD lc_adler.
|
lv_b = lv_b + lv_a.
|
||||||
|
|
||||||
|
* delay the MOD operation until the integer might overflow
|
||||||
|
* articles describe 5552 additions are allowed, but this assumes unsigned integers
|
||||||
|
* instead of allowing a fixed number of additions before running MOD, then
|
||||||
|
* just compare value of lv_b, this is 1 operation less than comparing and adding
|
||||||
|
IF lv_b > lc_max_b.
|
||||||
|
lv_a = lv_a MOD lc_adler.
|
||||||
|
lv_b = lv_b MOD lc_adler.
|
||||||
|
ENDIF.
|
||||||
ENDDO.
|
ENDDO.
|
||||||
|
|
||||||
|
lv_a = lv_a MOD lc_adler.
|
||||||
|
lv_b = lv_b MOD lc_adler.
|
||||||
|
|
||||||
lv_x = lv_a.
|
lv_x = lv_a.
|
||||||
lv_ca = lv_x.
|
lv_ca = lv_x.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user