mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
Merge pull request #1603 from mkaesemann/feature/BITBYTE_TO_INT_optimization
Performance Improvement in BITBYTE_TO_INT Conversion
This commit is contained in:
commit
f54009e65a
|
@ -50,19 +50,36 @@ CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD bitbyte_to_int.
|
METHOD bitbyte_to_int.
|
||||||
|
|
||||||
DATA: lv_bits TYPE string.
|
DATA: bitbyte TYPE string,
|
||||||
|
len TYPE i,
|
||||||
|
offset TYPE i.
|
||||||
|
|
||||||
|
bitbyte = iv_bits.
|
||||||
lv_bits = iv_bits.
|
SHIFT bitbyte LEFT DELETING LEADING '0 '.
|
||||||
|
len = strlen( bitbyte ).
|
||||||
|
offset = len - 1.
|
||||||
|
|
||||||
rv_int = 0.
|
rv_int = 0.
|
||||||
WHILE strlen( lv_bits ) > 0.
|
DO len TIMES.
|
||||||
rv_int = rv_int * 2.
|
|
||||||
IF lv_bits(1) = '1'.
|
IF sy-index = 1.
|
||||||
rv_int = rv_int + 1.
|
|
||||||
|
"Intialize
|
||||||
|
CASE bitbyte+offset(1).
|
||||||
|
WHEN '1'.
|
||||||
|
rv_int = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ELSE.
|
||||||
|
CASE bitbyte+offset(1).
|
||||||
|
WHEN '1'.
|
||||||
|
rv_int = rv_int + ( 2 ** ( sy-index - 1 ) ).
|
||||||
|
ENDCASE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
lv_bits = lv_bits+1.
|
|
||||||
ENDWHILE.
|
offset = offset - 1. "Move Cursor
|
||||||
|
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
ENDMETHOD. "bitbyte_to_int
|
ENDMETHOD. "bitbyte_to_int
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception.
|
METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception.
|
||||||
METHODS split_string FOR TESTING.
|
METHODS split_string FOR TESTING.
|
||||||
|
METHODS convert_bitbyte FOR TESTING RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS. "ltcl_convert DEFINITION
|
ENDCLASS. "ltcl_convert DEFINITION
|
||||||
|
|
||||||
|
@ -18,6 +19,46 @@ ENDCLASS. "ltcl_convert DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS ltcl_convert IMPLEMENTATION.
|
CLASS ltcl_convert IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD convert_bitbyte.
|
||||||
|
|
||||||
|
DATA: lv_xstring TYPE xstring,
|
||||||
|
lv_byte TYPE x,
|
||||||
|
lv_input TYPE i,
|
||||||
|
lv_bitbyte TYPE zif_abapgit_definitions=>ty_bitbyte,
|
||||||
|
lv_byteint TYPE i,
|
||||||
|
lv_xbyteint TYPE xstring,
|
||||||
|
lv_xresult TYPE xstring,
|
||||||
|
lv_result TYPE i,
|
||||||
|
lv_offset TYPE i.
|
||||||
|
DATA: lt_bitbytes TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_bitbyte
|
||||||
|
WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
DO 1000 TIMES.
|
||||||
|
|
||||||
|
lv_result = 0.
|
||||||
|
CLEAR: lv_byteint, lv_xbyteint, lv_xresult.
|
||||||
|
|
||||||
|
lv_input = sy-index * 64.
|
||||||
|
lv_xstring = zcl_abapgit_convert=>int_to_xstring4( lv_input ).
|
||||||
|
DO 4 TIMES.
|
||||||
|
lv_offset = sy-index - 1.
|
||||||
|
lv_byte = lv_xstring+lv_offset(1).
|
||||||
|
lv_bitbyte = zcl_abapgit_convert=>x_to_bitbyte( lv_byte ).
|
||||||
|
lv_byteint = zcl_abapgit_convert=>bitbyte_to_int( lv_bitbyte ).
|
||||||
|
lv_xbyteint = lv_byteint.
|
||||||
|
CONCATENATE lv_xresult lv_xbyteint INTO lv_xresult
|
||||||
|
IN BYTE MODE.
|
||||||
|
ENDDO.
|
||||||
|
lv_result = zcl_abapgit_convert=>xstring_to_int( lv_xresult ).
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
exp = lv_input
|
||||||
|
act = lv_result ).
|
||||||
|
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD convert_int.
|
METHOD convert_int.
|
||||||
|
|
||||||
DATA: lv_xstring TYPE xstring,
|
DATA: lv_xstring TYPE xstring,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user