Files
abap-llm/tasks_gen/eval/G0116/reference/departure_planner.clas.abap

94 lines
2.5 KiB
ABAP

CLASS {{p}}departure_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_stop TYPE c LENGTH 4.
TYPES ty_line TYPE c LENGTH 6.
TYPES ty_depot TYPE c LENGTH 4.
TYPES ty_time TYPE t.
TYPES:
BEGIN OF ty_departure,
stop TYPE ty_stop,
line TYPE ty_line,
depart TYPE ty_time,
depot TYPE ty_depot,
END OF ty_departure,
tt_departures TYPE STANDARD TABLE OF ty_departure WITH EMPTY KEY.
METHODS constructor.
METHODS add_depot
IMPORTING iv_depot TYPE ty_depot
it_departures TYPE tt_departures.
METHODS next_departure
IMPORTING iv_stop TYPE ty_stop
iv_from TYPE ty_time
RETURNING VALUE(rs_departure) TYPE ty_departure.
METHODS departures_at_stop
IMPORTING iv_stop TYPE ty_stop
RETURNING VALUE(rt_departures) TYPE tt_departures.
METHODS count
RETURNING VALUE(rv_count) TYPE i.
PRIVATE SECTION.
TYPES tt_store TYPE SORTED TABLE OF ty_departure
WITH UNIQUE KEY stop depart line.
DATA mt_store TYPE tt_store.
METHODS first_index_of_stop
IMPORTING iv_stop TYPE ty_stop
RETURNING VALUE(rv_index) TYPE i.
ENDCLASS.
CLASS {{p}}departure_planner IMPLEMENTATION.
METHOD constructor.
CLEAR mt_store.
ENDMETHOD.
METHOD add_depot.
LOOP AT it_departures INTO DATA(ls_departure).
DATA(ls_store) = ls_departure.
ls_store-depot = iv_depot.
INSERT ls_store INTO TABLE mt_store.
ENDLOOP.
ENDMETHOD.
METHOD next_departure.
DATA(lv_start) = first_index_of_stop( iv_stop ).
IF lv_start = 0.
RETURN.
ENDIF.
LOOP AT mt_store INTO DATA(ls_departure) FROM lv_start.
IF ls_departure-stop <> iv_stop.
EXIT.
ENDIF.
IF ls_departure-depart >= iv_from.
rs_departure = ls_departure.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD departures_at_stop.
DATA(lv_start) = first_index_of_stop( iv_stop ).
IF lv_start = 0.
RETURN.
ENDIF.
LOOP AT mt_store INTO DATA(ls_departure) FROM lv_start.
IF ls_departure-stop <> iv_stop.
EXIT.
ENDIF.
APPEND ls_departure TO rt_departures.
ENDLOOP.
ENDMETHOD.
METHOD count.
rv_count = lines( mt_store ).
ENDMETHOD.
METHOD first_index_of_stop.
READ TABLE mt_store TRANSPORTING NO FIELDS WITH KEY stop = iv_stop.
IF sy-subrc = 0.
rv_index = sy-tabix.
ENDIF.
ENDMETHOD.
ENDCLASS.