diff --git a/extract.cpp b/extract.cpp index 2ad1f7af8..4a59191b7 100644 --- a/extract.cpp +++ b/extract.cpp @@ -1,6 +1,6 @@ /* -Copyright (c) 2014, Project OSRM, Dennis Luxen, others +Copyright (c) 2015, Project OSRM, Dennis Luxen, others All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -26,17 +26,46 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "extractor/extractor.hpp" +#include "extractor/extractor_options.hpp" #include "Util/simple_logger.hpp" -int main (int argc, char *argv[]) +int main(int argc, char *argv[]) { try { - return Extractor().Run(argc, argv); + LogPolicy::GetInstance().Unmute(); + ExtractorConfig extractor_config; + + if (!ExtractorOptions::ParseArguments(argc, argv, extractor_config)) + { + return 0; + } + ExtractorOptions::GenerateOutputFilesNames(extractor_config); + + if (1 > extractor_config.requested_num_threads) + { + SimpleLogger().Write(logWARNING) << "Number of threads must be 1 or larger"; + return 1; + } + + if (!boost::filesystem::is_regular_file(extractor_config.input_path)) + { + SimpleLogger().Write(logWARNING) + << "Input file " << extractor_config.input_path.string() << " not found!"; + return 1; + } + + if (!boost::filesystem::is_regular_file(extractor_config.profile_path)) + { + SimpleLogger().Write(logWARNING) << "Profile " << extractor_config.profile_path.string() + << " not found!"; + return 1; + } + + return extractor().run(extractor_config); } catch (const std::exception &e) { SimpleLogger().Write(logWARNING) << "[exception] " << e.what(); } - } diff --git a/extractor/extractor.cpp b/extractor/extractor.cpp index e3a5090e9..a4c31e04e 100644 --- a/extractor/extractor.cpp +++ b/extractor/extractor.cpp @@ -31,7 +31,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "extraction_node.hpp" #include "extraction_way.hpp" #include "extractor_callbacks.hpp" -#include "extractor_options.hpp" #include "restriction_parser.hpp" #include "scripting_environment.hpp" @@ -63,41 +62,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -int Extractor::Run(int argc, char *argv[]) +int extractor::run(const ExtractorConfig &extractor_config) { - ExtractorConfig extractor_config; - try { LogPolicy::GetInstance().Unmute(); TIMER_START(extracting); - if (!ExtractorOptions::ParseArguments(argc, argv, extractor_config)) - { - return 0; - } - ExtractorOptions::GenerateOutputFilesNames(extractor_config); - - if (1 > extractor_config.requested_num_threads) - { - SimpleLogger().Write(logWARNING) << "Number of threads must be 1 or larger"; - return 1; - } - - if (!boost::filesystem::is_regular_file(extractor_config.input_path)) - { - SimpleLogger().Write(logWARNING) - << "Input file " << extractor_config.input_path.string() << " not found!"; - return 1; - } - - if (!boost::filesystem::is_regular_file(extractor_config.profile_path)) - { - SimpleLogger().Write(logWARNING) << "Profile " << extractor_config.profile_path.string() - << " not found!"; - return 1; - } - const unsigned recommended_num_threads = tbb::task_scheduler_init::default_num_threads(); const auto number_of_threads = std::min(recommended_num_threads, extractor_config.requested_num_threads); @@ -236,8 +207,7 @@ int Extractor::Run(int argc, char *argv[]) TIMER_STOP(parsing); SimpleLogger().Write() << "Parsing finished after " << TIMER_SEC(parsing) << " seconds"; - SimpleLogger().Write() << "Raw input contains " - << number_of_nodes.load() << " nodes, " + SimpleLogger().Write() << "Raw input contains " << number_of_nodes.load() << " nodes, " << number_of_ways.load() << " ways, and " << number_of_relations.load() << " relations, and " << number_of_others.load() << " unknown entities"; diff --git a/extractor/extractor.hpp b/extractor/extractor.hpp index e9edbea54..c06968c55 100644 --- a/extractor/extractor.hpp +++ b/extractor/extractor.hpp @@ -1,13 +1,37 @@ +/* + +Copyright (c) 2015, Project OSRM, Dennis Luxen, others +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + #ifndef EXTRACTOR_HPP #define EXTRACTOR_HPP -#include +#include "extractor_options.hpp" -#include - -/** \brief Class of 'extract' utility. */ -struct Extractor +struct extractor { - int Run(int argc, char *argv[]); + int run(const ExtractorConfig &extractor_config); }; #endif /* EXTRACTOR_HPP */ diff --git a/extractor/extractor_options.hpp b/extractor/extractor_options.hpp index 118da78d9..36e3f4d41 100644 --- a/extractor/extractor_options.hpp +++ b/extractor/extractor_options.hpp @@ -28,12 +28,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef EXTRACTOR_OPTIONS_HPP #define EXTRACTOR_OPTIONS_HPP -#include "extractor.hpp" +#include struct ExtractorConfig { ExtractorConfig() noexcept : requested_num_threads(0) {} - unsigned requested_num_threads; boost::filesystem::path config_file_path; boost::filesystem::path input_path; boost::filesystem::path profile_path; @@ -41,6 +40,8 @@ struct ExtractorConfig std::string output_file_name; std::string restriction_file_name; std::string timestamp_file_name; + + unsigned requested_num_threads; }; struct ExtractorOptions