XNSim/XNEngine/main.cpp

94 lines
2.3 KiB
C++
Executable File

/**
* @file main.cpp
* @author jinchao
* @brief 主函数
* @version 1.0
* @date 2025-02-14
*
* @copyright Copyright (c) 2025 COMAC
*
*/
#include <iostream>
#include <string>
#include <cstdlib>
#include "XNEngine.h"
/**
* @brief 主函数
* @param argc 参数个数
* @param argv 参数列表
* @return 返回值
*/
int main(int argc, char *argv[])
{
XNEngine engine;
//检测输入参数个数
if (argc <= 1) {
std::cerr << "A02012001: 输入参数太少! 使用 -h 查看帮助." << std::endl;
return -1;
}
std::string configPath;
std::string configId;
bool hasConfigPath = false;
bool hasConfigId = false;
std::string arg = argv[1];
if ("-h" == arg) {
std::cout << "-f\t<config_file>\t指定构型配置文件路径, 不可与-id参数同时使用" << std::endl;
std::cout << "-id\t<config_id>\t指定构型ID, 不可与-f参数同时使用" << std::endl;
std::cout << "-test\t\t\t指定测试模式" << std::endl;
std::cout << "-h\t\t\t查看帮助" << std::endl;
std::cout << "-v\t\t\t查看版本" << std::endl;
return 0;
} else if ("-v" == arg) {
std::cout << "XNEngine v1.0.0" << std::endl;
return 0;
}
//检查是否包含-f和-id参数
for (int i = 1; i < argc;) {
std::string arg = argv[i];
if ("-f" == arg) {
if ((i + 1) < argc) {
configPath = argv[i + 1];
hasConfigPath = true;
i += 2;
} else {
std::cerr << "A02012002: 在-f参数后, 未指定构型配置文件路径, 引擎将退出!"
<< std::endl;
return -1;
}
} else if ("-id" == arg) {
if ((i + 1) < argc) {
configId = argv[i + 1];
hasConfigId = true;
i += 2;
} else {
std::cerr << "A02012003: 在-id参数后, 未指定构型ID, 引擎将退出!" << std::endl;
return -1;
}
} else if ("-test" == arg) {
engine.SetTestMode(true);
i++;
} else {
std::cerr << "A02012004: 无法识别的参数 " << arg << " , 引擎将退出!" << std::endl;
return -1;
}
}
//检查是否同时包含-f和-id参数
if (hasConfigPath && hasConfigId) {
std::cerr << "A02012005: 请不要同时使用 -f 和 -id 参数, 引擎将退出!" << std::endl;
return -1;
}
//检测配置文件格式
if (hasConfigPath) {
return engine.Run(configPath, 0);
} else if (hasConfigId) {
return engine.Run(configId, 1);
}
return -1;
}