bool OptionsCont::set(const std::string &name, bool value) throw(InvalidArgument) { Option *o = getSecure(name); if (!o->isBool()) { throw InvalidArgument("The option '" + name + "' is not a boolean attribute and requires an argument."); } if (!o->isWriteable()) { reportDoubleSetting(name); return false; } try { if (!o->set(value)) { return false; } } catch (InvalidArgument &e) { MsgHandler::getErrorInstance()->inform("While processing option '" + name + "':\n " + e.what()); return false; } return true; }
void OptionsCont::printHelp(std::ostream &os) throw() { std::vector<std::string>::const_iterator i, j; // print application description os << ' ' << std::endl; splitLines(os, myAppDescription , 0, 0); os << std::endl; // print usage BNF os << "Usage: " << myAppName << " [OPTION]*" << std::endl; os << ' ' << std::endl; // print usage examples if (myCallExamples.size()>1) { os << " Examples:" << std::endl; } else if (myCallExamples.size()!=0) { os << " Example:" << std::endl; } if (myCallExamples.size()!=0) { for (i=myCallExamples.begin(); i!=myCallExamples.end(); ++i) { os << " " << myAppName << ' ' << (*i) << std::endl; } } os << ' ' << std::endl; // print additional text if any if (myAdditionalMessage.length()>0) { os << myAdditionalMessage << std::endl << ' ' << std::endl; } // print the options // check their sizes first // we want to know how large the largest not-too-large-entry will be size_t tooLarge = 40; size_t maxSize = 0; for (i=mySubTopics.begin(); i!=mySubTopics.end(); ++i) { const std::vector<std::string> &entries = mySubTopicEntries[*i]; for (j=entries.begin(); j!=entries.end(); ++j) { Option *o = getSecure(*j); // name, two leading spaces and "--" size_t csize = (*j).length() + 2 + 4; // abbreviation length ("-X, "->4chars) if any std::vector<std::string> synonymes = getSynonymes(*j); if (find_if(synonymes.begin(), synonymes.end(), abbreviation_finder())!=synonymes.end()) { csize += 4; } // the type name if (!o->isBool()) { csize += 1 + o->getTypeName().length(); } // divider csize += 2; if (csize<tooLarge&&maxSize<csize) { maxSize = csize; } } } for (i=mySubTopics.begin(); i!=mySubTopics.end(); ++i) { os << ' ' << *i << " Options:" << std::endl; const std::vector<std::string> &entries = mySubTopicEntries[*i]; for (j=entries.begin(); j!=entries.end(); ++j) { // start length computation size_t csize = (*j).length() + 2; Option *o = getSecure(*j); os << " "; // write abbreviation if given std::vector<std::string> synonymes = getSynonymes(*j); std::vector<std::string>::iterator a = find_if(synonymes.begin(), synonymes.end(), abbreviation_finder()); if (a!=synonymes.end()) { os << '-' << (*a) << ", "; csize += 4; } // write leading '-'/"--" os << "--"; csize += 2; // write the name os << *j; // write the type if not a bool option if (!o->isBool()) { os << ' ' << o->getTypeName(); csize += 1 + o->getTypeName().length(); } csize += 2; // write the description formatting it os << " "; size_t r; for (r=maxSize; r>csize; --r) { os << ' '; } std::string desc = o->getDescription(); size_t offset = csize > tooLarge ? csize : maxSize; splitLines(os, desc, offset, maxSize); } os << std::endl; } }
bool OptionsCont::isBool(const std::string &name) const throw(InvalidArgument) { Option *o = getSecure(name); return o->isBool(); }
bool OptionsCont::isBool(const std::string& name) const { Option* o = getSecure(name); return o->isBool(); }