1*7212d21dSBen Tyner #include <algorithm> 2*7212d21dSBen Tyner #include <string> 3*7212d21dSBen Tyner 4*7212d21dSBen Tyner /** @brief Search the command line arguments for an option */ 5*7212d21dSBen Tyner bool getCliOption(char** i_begin, char** i_end, const std::string& i_option) 6*7212d21dSBen Tyner { 7*7212d21dSBen Tyner return (i_end != std::find(i_begin, i_end, i_option)); 8*7212d21dSBen Tyner } 9*7212d21dSBen Tyner 10*7212d21dSBen Tyner /** @brief Search the command line arguments for a setting value */ 11*7212d21dSBen Tyner char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting) 12*7212d21dSBen Tyner { 13*7212d21dSBen Tyner char** value = std::find(i_begin, i_end, i_setting); 14*7212d21dSBen Tyner return (value != i_end && ++value != i_end) ? *value : 0; 15*7212d21dSBen Tyner } 16*7212d21dSBen Tyner 17*7212d21dSBen Tyner /** @brief Parse command line for configuration flags */ 18*7212d21dSBen Tyner void parseConfig(char** i_begin, char** i_end, bool& o_vital, bool& o_checkstop, 19*7212d21dSBen Tyner bool& o_terminate, bool& o_breakpoints) 20*7212d21dSBen Tyner { 21*7212d21dSBen Tyner char* setting; 22*7212d21dSBen Tyner 23*7212d21dSBen Tyner // --all on/off takes precedence over individual settings 24*7212d21dSBen Tyner setting = getCliSetting(i_begin, i_end, "--all"); 25*7212d21dSBen Tyner if (nullptr != setting) 26*7212d21dSBen Tyner { 27*7212d21dSBen Tyner if (std::string("off") == setting) 28*7212d21dSBen Tyner { 29*7212d21dSBen Tyner o_vital = false; 30*7212d21dSBen Tyner o_checkstop = false; 31*7212d21dSBen Tyner o_terminate = false; 32*7212d21dSBen Tyner o_breakpoints = false; 33*7212d21dSBen Tyner } 34*7212d21dSBen Tyner 35*7212d21dSBen Tyner if (std::string("on") == setting) 36*7212d21dSBen Tyner { 37*7212d21dSBen Tyner o_vital = true; 38*7212d21dSBen Tyner o_checkstop = true; 39*7212d21dSBen Tyner o_terminate = true; 40*7212d21dSBen Tyner o_breakpoints = true; 41*7212d21dSBen Tyner } 42*7212d21dSBen Tyner } 43*7212d21dSBen Tyner // Parse individual options 44*7212d21dSBen Tyner else 45*7212d21dSBen Tyner { 46*7212d21dSBen Tyner setting = getCliSetting(i_begin, i_end, "--vital"); 47*7212d21dSBen Tyner if (std::string("off") == setting) 48*7212d21dSBen Tyner { 49*7212d21dSBen Tyner o_vital = false; 50*7212d21dSBen Tyner } 51*7212d21dSBen Tyner if (std::string("on") == setting) 52*7212d21dSBen Tyner { 53*7212d21dSBen Tyner o_vital = true; 54*7212d21dSBen Tyner } 55*7212d21dSBen Tyner 56*7212d21dSBen Tyner setting = getCliSetting(i_begin, i_end, "--checkstop"); 57*7212d21dSBen Tyner if (std::string("off") == setting) 58*7212d21dSBen Tyner { 59*7212d21dSBen Tyner o_checkstop = false; 60*7212d21dSBen Tyner } 61*7212d21dSBen Tyner if (std::string("on") == setting) 62*7212d21dSBen Tyner { 63*7212d21dSBen Tyner o_checkstop = true; 64*7212d21dSBen Tyner } 65*7212d21dSBen Tyner 66*7212d21dSBen Tyner setting = getCliSetting(i_begin, i_end, "--terminate"); 67*7212d21dSBen Tyner if (std::string("off") == setting) 68*7212d21dSBen Tyner { 69*7212d21dSBen Tyner o_terminate = false; 70*7212d21dSBen Tyner } 71*7212d21dSBen Tyner if (std::string("on") == setting) 72*7212d21dSBen Tyner { 73*7212d21dSBen Tyner o_terminate = true; 74*7212d21dSBen Tyner } 75*7212d21dSBen Tyner 76*7212d21dSBen Tyner setting = getCliSetting(i_begin, i_end, "--breakpoints"); 77*7212d21dSBen Tyner if (std::string("off") == setting) 78*7212d21dSBen Tyner { 79*7212d21dSBen Tyner o_breakpoints = false; 80*7212d21dSBen Tyner } 81*7212d21dSBen Tyner if (std::string("on") == setting) 82*7212d21dSBen Tyner { 83*7212d21dSBen Tyner o_breakpoints = true; 84*7212d21dSBen Tyner } 85*7212d21dSBen Tyner } 86*7212d21dSBen Tyner } 87