Files
abap-llm/tasks_gen/train/G1013/faulty/m2_log_merger.clas.abap

85 lines
2.6 KiB
ABAP

CLASS {{p}}log_merger DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_log_no TYPE c LENGTH 10,
ty_district TYPE c LENGTH 4,
BEGIN OF ty_log,
log_no TYPE ty_log_no,
district TYPE ty_district,
length_cm TYPE i,
diameter_cm TYPE i,
END OF ty_log,
tt_log TYPE STANDARD TABLE OF ty_log WITH EMPTY KEY,
BEGIN OF ty_district_stat,
district TYPE ty_district,
log_qty TYPE i,
total_length_cm TYPE i,
END OF ty_district_stat,
tt_district_stat TYPE STANDARD TABLE OF ty_district_stat WITH EMPTY KEY.
METHODS combine
IMPORTING it_first TYPE tt_log
it_second TYPE tt_log
RETURNING VALUE(rt_result) TYPE tt_log.
METHODS count_by_district
IMPORTING it_log TYPE tt_log
RETURNING VALUE(rt_stat) TYPE tt_district_stat.
PRIVATE SECTION.
CONSTANTS:
c_min_length TYPE i VALUE 200,
c_min_diameter TYPE i VALUE 20.
TYPES tt_log_keyed TYPE SORTED TABLE OF ty_log WITH UNIQUE KEY log_no.
METHODS add_logs
IMPORTING it_log TYPE tt_log
CHANGING ct_keyed TYPE tt_log_keyed.
METHODS is_ready
IMPORTING is_log TYPE ty_log
RETURNING VALUE(rv_ready) TYPE abap_bool.
ENDCLASS.
CLASS {{p}}log_merger IMPLEMENTATION.
METHOD combine.
DATA lt_keyed TYPE tt_log_keyed.
add_logs( EXPORTING it_log = it_first CHANGING ct_keyed = lt_keyed ).
add_logs( EXPORTING it_log = it_second CHANGING ct_keyed = lt_keyed ).
LOOP AT lt_keyed INTO DATA(ls_log).
IF is_ready( ls_log ) = abap_true.
INSERT ls_log INTO TABLE rt_result.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD count_by_district.
DATA lt_stat TYPE SORTED TABLE OF ty_district_stat WITH UNIQUE KEY district.
LOOP AT it_log INTO DATA(ls_log).
ASSIGN lt_stat[ district = ls_log-district ] TO FIELD-SYMBOL(<ls_stat>).
IF sy-subrc <> 0.
INSERT VALUE #( district = ls_log-district
log_qty = 2
total_length_cm = ls_log-length_cm ) INTO TABLE lt_stat.
ELSE.
<ls_stat>-log_qty += 1.
<ls_stat>-total_length_cm += ls_log-length_cm.
ENDIF.
ENDLOOP.
rt_stat = lt_stat.
ENDMETHOD.
METHOD add_logs.
LOOP AT it_log INTO DATA(ls_log).
INSERT ls_log INTO TABLE ct_keyed.
ENDLOOP.
ENDMETHOD.
METHOD is_ready.
rv_ready = xsdbool( is_log-length_cm >= c_min_length
AND is_log-diameter_cm >= c_min_diameter ).
ENDMETHOD.
ENDCLASS.