65,209
社区成员
发帖
与我相关
我的任务
分享#include <string>
#include <iostream>
#include <fstream>
#include <boost/program_options.hpp>
#include "inc/workspace.h"
#include "inc/network.h"
using namespace std;
using namespace DSSRExpression;
const string g_copyright = "Copyright (c) 2014 Yao(21741121@qq.com), Heqibo. All rights reserved.";
const string g_version = "Build expression of the Distribution System Security Region Version 1.0.0609"; // Major.Minor.Date
int main(int ac, char* av[])
{
try
{
string input_directory;
string output_directory;
namespace po = boost::program_options;
// 基本参数
po::options_description generic_options("Usage,\nGeneric options");
generic_options.add_options()
("help,h", "print help message")
("input,i", po::value<string>(&input_directory)->default_value("IN"), "directory of input files")
("output,o", po::value<string>(&output_directory)->default_value("OUT"), "directory for output files")
("debug,d", "output debug file to output directory")
;
// 读取文件参数
string work_space_file;
po::options_description config_options("Config options");
config_options.add_options()
("config-file", po::value<string>(&work_space_file), "config file with generic options")
;
po::positional_options_description p;
p.add("config-file", -1);
// 解析命令行参数
po::options_description cmd_options = generic_options.add(config_options);
po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(cmd_options).positional(p).style(po::command_line_style::default_style | po::command_line_style::case_insensitive | po::command_line_style::allow_slash_for_short).run(), vm);
//po::store(po::parse_command_line(ac, av, desc, po::command_line_style::default_style | po::command_line_style::case_insensitive | po::command_line_style::allow_slash_for_short), vm);
po::notify(vm);
if (!work_space_file.empty())
{
// 存在workspace文件时,以此为准
// 解析workspace参数
ifstream ifs(work_space_file);
vm.clear();
po::store(po::parse_config_file(ifs, generic_options), vm);
po::notify(vm);
}
cout << g_version << "\n" << g_copyright << "\n\n";
if (vm.count("help") > 0|| vm.empty())
{
cout << cmd_options << "\n";
return EXIT_SUCCESS;
}
if (!input_directory.empty() && !output_directory.empty())
{
// 建立工作空间,读取参数
work_space ws;
ws.set_directory(input_directory, output_directory);
ws.is_output_debugfile = vm.count("debug") > 0;
// 读取输入文件,生成网络
network* p_nw = new network();
ws.build_network(p_nw);
// 生成表达式
p_nw->compile_expression();
// 根据表达式计算结果
p_nw->calculate_expression_value();
// 输出结果
ws.output(p_nw);
delete p_nw;
p_nw = nullptr;
return EXIT_SUCCESS;
}
}
catch(exception& e)
{
cerr << "Oops! " << e.what() << "\n";
return EXIT_FAILURE;
}
catch(...)
{
cerr << "Exception of unknown type!\n";
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}