From 0402fac3898b080e48e0ad7a6508fab08f828205 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 12 Apr 2017 23:47:19 -0500 Subject: [PATCH] Add string and in options to ClArgs --- OxConfig.cmake | 2 ++ src/ox/clargs/clargs.cpp | 33 +++++++++++++++++++++++++++++---- src/ox/clargs/clargs.hpp | 10 ++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/OxConfig.cmake b/OxConfig.cmake index 63a0a417c..6312e31c8 100644 --- a/OxConfig.cmake +++ b/OxConfig.cmake @@ -2,8 +2,10 @@ if("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") set(Ox_INCLUDE_DIRS /usr/local/include/) set(OxStd_LIBRARY /usr/local/lib/ox/libOxStd.a) set(OxFS_LIBRARY /usr/local/lib/ox/libOxFS.a) + set(OxClArgs_LIBRARY /usr/local/lib/ox/libOxClArgs.a) else("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") set(Ox_INCLUDE_DIRS ${CMAKE_FIND_ROOT_PATH}/include/) set(OxStd_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxStd.a) set(OxFS_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxFS.a) + set(OxClArgs_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxClArgs.a) endif("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") diff --git a/src/ox/clargs/clargs.cpp b/src/ox/clargs/clargs.cpp index c20db5559..cf32e861b 100644 --- a/src/ox/clargs/clargs.cpp +++ b/src/ox/clargs/clargs.cpp @@ -6,25 +6,50 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include #include "clargs.hpp" namespace ox { namespace clargs { +using ::std::string; +using namespace ::std; + ClArgs::ClArgs(int argc, const char **args) { for (int i = 0; i < argc; i++) { - std::string arg = args[i]; + string arg = args[i]; if (arg[0] == '-') { while (arg[0] == '-' && arg.size()) { arg = arg.substr(1); } - m_args[arg] = true; + m_bools[arg.c_str()] = true; + + // parse additional arguments + if (i < argc) { + string val = args[i + 1]; + if (val[i] != '-') { + if (val == "false") { + m_bools[arg.c_str()] = false; + } + m_strings[arg.c_str()] = val.c_str(); + m_ints[arg.c_str()] = ox_atoi(val.c_str()); + i++; + } + } } } } -bool ClArgs::operator[](std::string arg) { - return m_args[arg]; +bool ClArgs::getBool(const char *arg) { + return m_bools[arg]; +} + +const char *ClArgs::getString(const char *arg) { + return m_strings[arg]; +} + +int ClArgs::getInt(const char *arg) { + return m_ints[arg]; } } diff --git a/src/ox/clargs/clargs.hpp b/src/ox/clargs/clargs.hpp index be250d56c..443f82a94 100644 --- a/src/ox/clargs/clargs.hpp +++ b/src/ox/clargs/clargs.hpp @@ -16,12 +16,18 @@ namespace clargs { class ClArgs { private: - std::map m_args; + ::std::map<::std::string, bool> m_bools; + ::std::map<::std::string, const char*> m_strings; + ::std::map<::std::string, int> m_ints; public: ClArgs(int argc, const char **args); - bool operator[](std::string arg); + bool getBool(const char *arg); + + const char *getString(const char *arg); + + int getInt(const char *arg); }; }