Pipeline controller: plan 2 (hard +, error +50 %), backlog throttle, 2 trajectory workers, stop rules, summaries every 50; budget reserve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
84
tasks_gen/train/G1315/reference/log_merger.clas.abap
Normal file
84
tasks_gen/train/G1315/reference/log_merger.clas.abap
Normal file
@@ -0,0 +1,84 @@
|
||||
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 = 1
|
||||
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.
|
||||
Reference in New Issue
Block a user