Skip to content
Draft
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ include(cmake/pkg.cmake)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/gtfsrt/gtfs-realtime.pb.h
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/gtfsrt/gtfs-realtime.pb.cc
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/generated/gtfsrt
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:protoc>
--cpp_out=${CMAKE_CURRENT_BINARY_DIR}/generated/gtfsrt
--proto_path=${CMAKE_CURRENT_SOURCE_DIR}
Expand Down Expand Up @@ -116,6 +117,12 @@ add_executable(nigiri-import ${nigiri-import-files})
target_link_libraries(nigiri-import PRIVATE nigiri boost-program_options ianatzdb-res)
target_compile_features(nigiri-import PUBLIC cxx_std_23)

# --- EXPORTER ---
file(GLOB_RECURSE nigiri-export-files exe/export.cc)
add_executable(nigiri-export ${nigiri-export-files})
target_link_libraries(nigiri-export PRIVATE nigiri boost-program_options ianatzdb-res)
target_compile_features(nigiri-export PUBLIC cxx_std_23)

# --- BENCHMARK ---
file(GLOB_RECURSE nigiri-benchmark-files exe/benchmark.cc)
add_executable(nigiri-benchmark ${nigiri-benchmark-files})
Expand Down Expand Up @@ -148,4 +155,4 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
target_link_options(nigiri-import PRIVATE -Wl,-no_deduplicate)
target_link_options(nigiri-test PRIVATE -Wl,-no_deduplicate)
target_link_options(nigiri-benchmark PRIVATE -Wl,-no_deduplicate)
endif()
endif()
44 changes: 44 additions & 0 deletions exe/export.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <filesystem>
#include <iostream>

#include "boost/program_options.hpp"

#include "nigiri/export_gtfs.h"
#include "nigiri/logging.h"
#include "nigiri/timetable.h"
#include "nigiri/types.h"

using namespace nigiri;

int main(int argc, char* argv[]) {
namespace bpo = boost::program_options;

auto tt_path = std::filesystem::path{};
auto gtfs_dir = std::filesystem::path{};

bpo::options_description desc("Allowed options");
Comment thread
PatrickSteil marked this conversation as resolved.
Outdated
desc.add_options()("help,h", "produce this help message") //
("tt_path,p", bpo::value(&tt_path)->required(),
"path to a binary file containing a serialized nigiri timetable") //
("gtfs_export_dir,o", bpo::value(&gtfs_dir)->required(),
"path to the directory to export the timetable as GTFS");
bpo::variables_map vm;
bpo::store(bpo::command_line_parser(argc, argv).options(desc).run(), vm);

if (vm.count("help") != 0U) {
std::cout << desc << "\n";
return 0;
}

bpo::notify(vm);

std::cout << "loading timetable...\n";
auto tt = *nigiri::timetable::read(tt_path);
tt.resolve();

std::cout << "exporting timetable as GTFS...\n";
export_gtfs(tt, gtfs_dir);
std::cout << "done.\n";

return 0;
}
43 changes: 43 additions & 0 deletions include/nigiri/export_gtfs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#pragma once

#include <filesystem>

#include "nigiri/timetable.h"

namespace nigiri {

struct timetable;

// Skip the first 9 stops, bcs they are sentinels
constexpr int stopOffset{9};

void export_gtfs(timetable const& tt, std::filesystem::path const& output_dir);

void write_feed_info(std::filesystem::path const& output_dir);

void write_agencies(timetable const& tt,
std::filesystem::path const& output_dir);

void write_stops(timetable const& tt, std::filesystem::path const& output_dir);

void write_stop_times(timetable const& tt,
std::filesystem::path const& output_dir);

void write_trips(timetable const& tt,
std::filesystem::path const& output_dir,
std::vector<size_t> const& route_offsets);

void write_routes(timetable const& tt,
std::filesystem::path const& output_dir,
std::vector<size_t> const& route_offsets);

void write_calendar(timetable const& tt,
std::filesystem::path const& output_dir);

void write_calendar_dates(timetable const& tt,
std::filesystem::path const& output_dir);

void write_transfers(timetable const& tt,
std::filesystem::path const& output_dir);

} // namespace nigiri
Loading
Loading