use enum as return code instead of boolean logic in extractor

This commit is contained in:
Dennis Luxen 2015-01-23 16:59:13 +01:00
parent dc7f21513a
commit cf21074f10
3 changed files with 63 additions and 39 deletions

View File

@ -36,10 +36,18 @@ int main(int argc, char *argv[])
LogPolicy::GetInstance().Unmute(); LogPolicy::GetInstance().Unmute();
ExtractorConfig extractor_config; ExtractorConfig extractor_config;
if (!ExtractorOptions::ParseArguments(argc, argv, extractor_config)) const return_code result = ExtractorOptions::ParseArguments(argc, argv, extractor_config);
if (return_code::fail == result)
{
return 1;
}
if (return_code::exit == result)
{ {
return 0; return 0;
} }
ExtractorOptions::GenerateOutputFilesNames(extractor_config); ExtractorOptions::GenerateOutputFilesNames(extractor_config);
if (1 > extractor_config.requested_num_threads) if (1 > extractor_config.requested_num_threads)
@ -61,11 +69,11 @@ int main(int argc, char *argv[])
<< " not found!"; << " not found!";
return 1; return 1;
} }
return extractor().run(extractor_config); return extractor().run(extractor_config);
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {
SimpleLogger().Write(logWARNING) << "[exception] " << e.what(); SimpleLogger().Write(logWARNING) << "[exception] " << e.what();
return 1;
} }
} }

View File

@ -36,7 +36,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <tbb/task_scheduler_init.h> #include <tbb/task_scheduler_init.h>
bool ExtractorOptions::ParseArguments(int argc, char *argv[], ExtractorConfig &extractor_config) return_code
ExtractorOptions::ParseArguments(int argc, char *argv[], ExtractorConfig &extractor_config)
{ {
// declare a group of options that will be allowed only on command line // declare a group of options that will be allowed only on command line
boost::program_options::options_description generic_options("Options"); boost::program_options::options_description generic_options("Options");
@ -79,23 +80,24 @@ bool ExtractorOptions::ParseArguments(int argc, char *argv[], ExtractorConfig &e
visible_options.add(generic_options).add(config_options); visible_options.add(generic_options).add(config_options);
// parse command line options // parse command line options
try
{
boost::program_options::variables_map option_variables; boost::program_options::variables_map option_variables;
boost::program_options::store(boost::program_options::command_line_parser(argc, argv) boost::program_options::store(boost::program_options::command_line_parser(argc, argv)
.options(cmdline_options) .options(cmdline_options)
.positional(positional_options) .positional(positional_options)
.run(), .run(),
option_variables); option_variables);
if (option_variables.count("version")) if (option_variables.count("version"))
{ {
SimpleLogger().Write() << g_GIT_DESCRIPTION; SimpleLogger().Write() << g_GIT_DESCRIPTION;
return false; return return_code::exit;
} }
if (option_variables.count("help")) if (option_variables.count("help"))
{ {
SimpleLogger().Write() << visible_options; SimpleLogger().Write() << visible_options;
return false; return return_code::exit;
} }
boost::program_options::notify(option_variables); boost::program_options::notify(option_variables);
@ -103,8 +105,8 @@ bool ExtractorOptions::ParseArguments(int argc, char *argv[], ExtractorConfig &e
// parse config file // parse config file
if (boost::filesystem::is_regular_file(extractor_config.config_file_path)) if (boost::filesystem::is_regular_file(extractor_config.config_file_path))
{ {
SimpleLogger().Write() << "Reading options from: " SimpleLogger().Write()
<< extractor_config.config_file_path.string(); << "Reading options from: " << extractor_config.config_file_path.string();
std::string ini_file_contents = std::string ini_file_contents =
ReadIniFileAndLowerContents(extractor_config.config_file_path); ReadIniFileAndLowerContents(extractor_config.config_file_path);
std::stringstream config_stream(ini_file_contents); std::stringstream config_stream(ini_file_contents);
@ -116,9 +118,16 @@ bool ExtractorOptions::ParseArguments(int argc, char *argv[], ExtractorConfig &e
if (!option_variables.count("input")) if (!option_variables.count("input"))
{ {
SimpleLogger().Write() << visible_options; SimpleLogger().Write() << visible_options;
return false; return return_code::exit;
} }
return true; }
catch (std::exception &e)
{
SimpleLogger().Write(logWARNING) << e.what();
return return_code::fail;
}
return return_code::ok;
} }
void ExtractorOptions::GenerateOutputFilesNames(ExtractorConfig &extractor_config) void ExtractorOptions::GenerateOutputFilesNames(ExtractorConfig &extractor_config)

View File

@ -30,6 +30,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
enum class return_code : unsigned
{
ok,
fail,
exit
};
struct ExtractorConfig struct ExtractorConfig
{ {
ExtractorConfig() noexcept : requested_num_threads(0) {} ExtractorConfig() noexcept : requested_num_threads(0) {}
@ -46,7 +53,7 @@ struct ExtractorConfig
struct ExtractorOptions struct ExtractorOptions
{ {
static bool ParseArguments(int argc, char *argv[], ExtractorConfig &extractor_config); static return_code ParseArguments(int argc, char *argv[], ExtractorConfig &extractor_config);
static void GenerateOutputFilesNames(ExtractorConfig &extractor_config); static void GenerateOutputFilesNames(ExtractorConfig &extractor_config);
}; };