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.