arguments.h
来自「AIML的实现」· C头文件 代码 · 共 364 行
H
364 行
#include <string>namespace qtgui{/* * I go ahead and pollute my applicaton's namespace. * This is okay, since I am creating an application and * am not creating an api. If this was an api I'd have * used another inner-namespace called something like impl * and then polluted that instead to keep my outter namespace * clean. */using namespace std;/** * Parses and sets the * arguments for main(). */class Arguments{ private: /** * Holds the reference to our * singelton reference */ static Arguments *m_instance; /** * Sets the arguments up * from main() as well * as the program name its * self. * * \param argc The number of arguments * sent in. * * \param args The array of arguments */ void privateSetArguments(int argc, char *args[]) { /* * Iterate over the arguments * and set them */ for(int i = 1; i < argc; ++i) { //get string of the argument string argument(args[i]); if(m_currentArgument == NO_ARG) { if(argument == "-aimlSchema" || argument == "-as") { m_currentArgument = AIML_SCHEMA; } else if(argument == "-botSchema" || argument == "-bs") { m_currentArgument = BOT_SCHEMA; } else if(argument == "-commonSchema" || argument == "-cs") { m_currentArgument = COMMON_SCHEMA; } else if(argument == "-configurationDirectory" || argument == "-cd") { m_currentArgument = CONFIGURATION; } else if(argument == "-aimlDirectory" || argument == "-ad") { m_currentArgument = AIML; } else if(argument == "-resourcesDirectory" || argument == "-rd") { m_currentArgument = RESOURCES; } else if(argument == "-help" || argument == "-h" || argument == "/?" || argument == "--help") { /* * Display help and exit */ cout << endl << endl << "[console.exe help]" << endl << "------------------" << endl << endl << "Available switches:" << endl << endl << "[-aimlSchema or -as]" << endl << " AIML Schema Path (default is ../../resources/schema/AIML.xsd)" << endl << endl << "[-botSchema or -bs] " << endl << " Bot Schema Path (default is ../resources/schema/bot-configuration.xsd)" << endl << endl << "[-commonSchema or -cs] " << endl << " Common Schema Path (default is ../resources/schema/common-types.xsd)" << endl << endl << "[-configurationDirectory or -cd] " << endl << " Configuration directory (default is ../../conf)" << endl << endl << "[-aimlDirectory or -ad] " << endl << " AIML directory with *.aiml files (default is ../../aiml/annotated_alice)" << endl << endl << "[-resourcesDirectory or -rd] " << endl << " AIML directory with resource files (default is ../../resources)" << endl << endl << endl; exit(0); } else { cout << "[Illegal argument of " + string(args[i]) + " found]" << endl; } } else { /* * We already encountered the switch, * now we just need to set the argument */ if(m_currentArgument == AIML) { m_aimlDirectory = argument; } else if(m_currentArgument == AIML_SCHEMA) { m_aimlSchemaPath = argument; } else if(m_currentArgument == BOT_SCHEMA) { m_botConfigurationSchemaPath = argument; } else if(m_currentArgument == COMMON_SCHEMA) { m_commonTypesSchemaPath = argument; } else if(m_currentArgument == CONFIGURATION) { m_configurationDirectory = argument; } else if(m_currentArgument == RESOURCES) { m_resourcesDirectory = argument; } else { cout << "Programmer error " "this should not be reached" << endl; } m_currentArgument = NO_ARG; } } } /** * Constructor that * sets the arguments up * from main() as well * as the program name its * self. This is a default * constructor that sets default * values for everything. * */ Arguments() : m_aimlSchemaPath("../../resources/schema/AIML.xsd"), m_commonTypesSchemaPath("../resources/schema/common-types.xsd"), m_botConfigurationSchemaPath("../resources/schema/bot-configuration.xsd"), m_configurationDirectory("../../conf"), m_aimlDirectory("../../aiml/annotated_alice"), m_currentArgument(NO_ARG), m_resourcesDirectory("../../resources") { } public: /** * Sets the arguments up * from main() as well * as the program name its * self. * * \param argc The number of arguments * sent in. * * \param args The array of arguments */ static void setArguments(int argc, char *args[]) { if(m_instance == 0) { m_instance = new Arguments(); } m_instance->privateSetArguments(argc, args); } /** * Gets our single instance * of this class * * \return the single instance * of this class */ static Arguments *getInstance() { if(m_instance == 0) { m_instance = new Arguments(); } return m_instance; } /** * Returns the configuration * directory that has been set. * * \return The configuration directory * where needed configuration files * are stored. */ string getConfigurationDirectory() const { return m_configurationDirectory; } /** * Returns the AIML * directory that has been set. * * \return The AIML directory * where aiml files are stored. */ string getAimlDirectory() const { return m_aimlDirectory; } /** * Returns the AIML schema * path that has been set. * * \return The AIML schema * path that has been set. */ string getAimlSchemaPath() const { return m_aimlSchemaPath; } /** * Returns the common types * schema path that has been set. * * \return The common types * schema path that has been set. */ string getCommonTypesSchemaPath() const { return m_commonTypesSchemaPath; } /** * Returns the bot configuration * schema path that has been set. * * \return the bot configuration * schema path that has been set. */ string getBotConfigurationSchemaPath() const { return m_botConfigurationSchemaPath; } /** * Returns the resource directory. * * \return the resource directory. */ string getResourcesDirectory() const { return m_resourcesDirectory; } /** * Enumeration of possible switches you * can give rebecca */ enum arguments{ NO_ARG, AIML, AIML_SCHEMA, COMMON_SCHEMA, BOT_SCHEMA, RESOURCES, CONFIGURATION}; /** * The current argument state. */ arguments m_currentArgument; /** * The location of RebeccaAIML's * configuration directory. * * If this is not set, it will default * to the current working directory * + "../../conf". This is where * needed configuration files are * stored. */ string m_configurationDirectory; /** * The location of a AIML directory. * * If this is not set, it will default * to the current working directory * + "../../aiml/annotated_alice". */ string m_aimlDirectory; /** * The path to the aiml xsd file. * * If this is not set, it will default * to the current working directory + * "../../resources/schema/AIML.xsd" */ string m_aimlSchemaPath; /** * The path to the the common types * schema file. * * If this is not set, it will default * to the current working directory + * "../resources/schema/common-types.xsd" */ string m_commonTypesSchemaPath; /** * The path to the bot configuration * schema file. * * If this is not set, it will default * to the current working directory + * "../resources/schema/bot-configuration.xsd" */ string m_botConfigurationSchemaPath; /** * The location of the resources * directory. If this is not set, it * will default to current working directory + * "../../resources" */ string m_resourcesDirectory;};} //end of qtgui namespace
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?