/* du2.hpp - timetable data structures */ #ifndef du2_hpp_ #define du2_hpp_ #include #include #include using packed_time = std::int_least16_t; inline packed_time pack_time(int hh, int mm) { return 60 * hh + mm; } inline int hours(packed_time tm) { return tm / 60; } inline int minutes(packed_time tm) { return tm % 60; } // dummy - for demonstration purposes only struct dummy_object {}; using dummy_container = std::set< dummy_object>; // containers - replace with appropriate types of containers using stop_container = dummy_container; using platform_container = dummy_container; using platform_route_container = dummy_container; using route_departure_container = dummy_container; using trip_container = dummy_container; using trip_departure_container = dummy_container; // main object - put something inside class timetable {}; // public attribute types - no change required using platform_name_const_reference = const std::string &; using stop_name_const_reference = const std::string &; using trip_name_const_reference = const int &; using route_name_const_reference = const std::string &; using seq_id = int; // public container references - no change required using stops_const_reference = const stop_container &; using platforms_const_reference = const platform_container &; using platform_routes_const_reference = const platform_route_container &; using route_departures_const_reference = const route_departure_container &; using trips_const_reference = const trip_container &; using trip_departures_const_reference = const trip_departure_container &; // public iterator references - no change required using trip_departure_const_iterator = trip_departure_container::const_iterator; using route_departure_const_iterator = route_departure_container::const_iterator; // public object references - no change required using timetable_const_reference = const timetable &; using stop_const_reference = stop_container::const_reference; using platform_const_reference = platform_container::const_reference; using platform_route_const_reference = platform_route_container::const_reference; using route_departure_const_reference = route_departure_container::const_reference; using trip_const_reference = trip_container::const_reference; using trip_departure_const_reference = trip_departure_container::const_reference; // public accessor functions - implement them stops_const_reference stops(timetable_const_reference tt); stop_const_reference get_stop(timetable_const_reference tt, const std::string & name); trips_const_reference trips(timetable_const_reference tt); stop_name_const_reference stop_name(stop_const_reference st); platforms_const_reference platforms(stop_const_reference st); platform_const_reference get_platform(stop_const_reference st, const std::string & name); platform_name_const_reference platform_name(platform_const_reference pl); platform_routes_const_reference routes(platform_const_reference pl); route_name_const_reference route_name(platform_route_const_reference pr); route_departures_const_reference departures(platform_route_const_reference pr); route_departure_const_iterator departure_at(platform_route_const_reference pr, packed_time tm); packed_time departure_time(route_departure_const_reference rd); trip_const_reference trip(route_departure_const_reference rd); trip_departure_const_iterator position_in_trip(route_departure_const_reference rd); trip_name_const_reference trip_name(trip_const_reference tr); trip_departures_const_reference departures(trip_const_reference tr); seq_id sequence_id(trip_const_reference tr, trip_departure_const_iterator tdit); packed_time departure_time(trip_departure_const_reference td); stop_const_reference stop(trip_departure_const_reference td); // public functions - implement them void read_timetable(timetable & tt, std::istream & ifs); void print_platform_timetables(std::ostream & oss, const timetable & tt, const std::string & sid, const std::string & pid); #endif /**/