CLASS zcl_abapgit_zlib_huffman DEFINITION PUBLIC CREATE PUBLIC . PUBLIC SECTION. TYPES: ty_lengths TYPE STANDARD TABLE OF i WITH DEFAULT KEY. CONSTANTS: c_maxbits TYPE i VALUE 15. METHODS: constructor IMPORTING it_lengths TYPE ty_lengths, get_count IMPORTING iv_index TYPE i RETURNING VALUE(rv_value) TYPE i, get_symbol IMPORTING iv_index TYPE i RETURNING VALUE(rv_value) TYPE i. PRIVATE SECTION. DATA: mt_count TYPE STANDARD TABLE OF i WITH DEFAULT KEY, mt_symbol TYPE STANDARD TABLE OF i WITH DEFAULT KEY. ENDCLASS. CLASS ZCL_ABAPGIT_ZLIB_HUFFMAN IMPLEMENTATION. METHOD constructor. DATA: lv_index TYPE i, lt_offset TYPE TABLE OF i, lv_length LIKE LINE OF it_lengths, lv_prev TYPE i, lv_count LIKE LINE OF mt_count. FIELD-SYMBOLS: LIKE LINE OF lt_offset, LIKE LINE OF mt_symbol, LIKE LINE OF it_lengths. DO c_maxbits TIMES. APPEND 0 TO mt_count. ENDDO. LOOP AT it_lengths INTO lv_index. IF lv_index = 0. CONTINUE. ENDIF. READ TABLE mt_count INDEX lv_index ASSIGNING . ASSERT sy-subrc = 0. = + 1. ENDLOOP. ************ APPEND 0 TO lt_offset. DO c_maxbits - 1 TIMES. READ TABLE mt_count INDEX sy-index INTO lv_count. ASSERT sy-subrc = 0. lv_prev = lv_prev + lv_count. APPEND lv_prev TO lt_offset. ENDDO. DO lines( it_lengths ) TIMES. APPEND 0 TO mt_symbol. ENDDO. DO lines( it_lengths ) TIMES. lv_index = sy-index. READ TABLE it_lengths INDEX lv_index INTO lv_length. ASSERT sy-subrc = 0. IF lv_length = 0. CONTINUE. ENDIF. READ TABLE lt_offset INDEX lv_length ASSIGNING . ASSERT sy-subrc = 0. READ TABLE mt_symbol INDEX + 1 ASSIGNING . ASSERT sy-subrc = 0. = lv_index - 1. = + 1. ENDDO. ENDMETHOD. METHOD get_count. READ TABLE mt_count INDEX iv_index INTO rv_value. "#EC CI_SUBRC ENDMETHOD. METHOD get_symbol. READ TABLE mt_symbol INDEX iv_index INTO rv_value. "#EC CI_SUBRC ENDMETHOD. ENDCLASS.