63inline std::ostringstream & operator << (std::ostringstream & s,
const std::vector < std::string > & str){
73 Option(T & var,
const T & defaultVar){
75 *(T*)(var_) = defaultVar;
76 defaultVar_ = defaultVar;
81 virtual void assign_(
char * opt = NULL){ convert(*(T*)(var_), opt); }
83 virtual std::string typname(){
return type(*(T*)(var_)); }
85 T value() {
return *(T*)(var_); }
87 virtual std::string defautToString() {
88 std::ostringstream streamOut;
89 streamOut << defaultVar_;
90 return streamOut.str();
98class DLLEXPORT OptionMap{
100 OptionMap(
const std::string & description =
"");
102 virtual ~OptionMap();
104 typedef std::map< char, OptionBase * > CharOptionMap;
105 typedef std::map< std::string, OptionBase * > LongOptionMap;
107 template <
class T >
void addLastArg(T & var,
const std::string & lastArgString){
108 lastArgString_ = lastArgString;
110 lastOption_->hasArg_ = required_argument;
113 template <
class T >
void add(T & var,
const std::string & key,
const std::string & longOpt,
114 const std::string & help){
115 add(var, key, longOpt, help, T(var));
118 template <
class T >
void add(T & var,
const std::string & key,
const std::string & longOpt,
119 const std::string & help,
const T & defaultVar){
121 if (key[ 0 ] !=
':') allKeys_ += key;
125 if ((*--key.end()) ==
':' || (*--longOpt.end() ==
':')) o->hasArg_ = required_argument;
126 else o->hasArg_ = no_argument;
128 std::string k( key.substr(0, key.rfind(
':')));
129 std::string lo(longOpt.substr(0, longOpt.rfind(
':')));
131 if (k.length() > 0) {
133 cMap_.insert(std::pair< char, OptionBase * >(k[ 0 ], o));
136 lMap_.insert(std::pair< std::string, OptionBase * >(lo, o));
137 options_.push_back(o);
142 void parse(
int argc,
char * argv[]);
144 void buildLongOptions();
146 inline void setDescription(
const std::string & description){ descriptionString_ = description; }
148 void printHelp(
const std::string & main);
150 OptionBase * findOption(
const char & key)
const {
151 log(Warning,
"command line parsing from core is obsolete and will be replaced.");
158 std::string allKeys_;
159 std::string lastArgString_;
160 std::string descriptionString_;
163 std::list< OptionBase * > options_;