Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
94 lines
2.5 KiB
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.
|