void CommaSeperatedEntryValidator::validate(const Teuchos::ParameterEntry & entry, const std::string & paramName, const std::string & sublistName) const { const std::string &entryName = entry.getAny(false).typeName(); Teuchos::any anyValue = entry.getAny(true); // type passed, validate value TEUCHOS_TEST_FOR_EXCEPTION(!(anyValue.type() == typeid(std::string) ), Teuchos::Exceptions::InvalidParameterType, "Sorry but it looks like the \"" << paramName << "\"" << " parameter in the \"" << sublistName << "\" sublist does not exist." << std::endl << std::endl << "Error: The value that you entered was the wrong type." << std::endl << "Parameter: " << paramName << std::endl << "Type specified: " << entryName << std::endl << "Type accepted: " << typeid(std::string).name() << std::endl << std::endl); const std::string & value = Teuchos::any_cast<std::string>(anyValue); std::vector<std::string> tokens; split(value,",",tokens); if(!allowEmpty_) { const std::string errorStr = "The value for \"string-list\" type parameter in sublist \""+sublistName+"\" named \""+paramName+"\" " "is incorrectly formatted. The expected format is\n" " \"<string>[, <string>]*\" " "your value is \""+value+"\""; // verify that their is a response type and an evaluation type TEUCHOS_TEST_FOR_EXCEPTION(tokens.size()==0, Teuchos::Exceptions::InvalidParameterValue,errorStr); } }
// ============================================================================ Teuchos::RCP<Recti::Domain::Abstract> Recti::Domain::Factory:: buildPolygon() const { const Teuchos::ParameterList & pointsList = pList_.sublist("Vertices"); Teuchos::Array<Point> vertices; Teuchos::ParameterList::ConstIterator k; for ( k=pointsList.begin(); k!=pointsList.end(); ++k ) { Teuchos::ParameterEntry e = pointsList.entry(k); TEUCHOS_ASSERT( e.isList() ); std::string label = pointsList.name(k); const Teuchos::ParameterList & coordinates = pointsList.sublist(label); Point X = Teuchos::tuple( coordinates.get<double>("x"), coordinates.get<double>("y"), 0.0 ); vertices.push_back( X ); } return Teuchos::rcp( new Polygon( vertices ) ); }
bool IsInRangeList(const Integral val, const Teuchos::ParameterEntry &e) { if (!e.isType<Teuchos::Array<Integral> >()) throw std::runtime_error("Should not call until modified"); Teuchos::Array<Integral> *valPtr=NULL; Teuchos::Array<Integral> &valList = e.getValue(valPtr); typedef IntegerRangeListValidator<Integral> irl_t; RCP<const irl_t> irl; bool fail = false; RCP<const Teuchos::ParameterEntryValidator> valtor = e.validator(); if (!valtor.is_null()){ try{ irl = rcp_dynamic_cast<const irl_t>(valtor); } catch (...){ fail = true; } } else{ fail = true; } if (fail) throw std::runtime_error("wrong type of parameter entry"); bool sorted = irl->inputListWillBeSorted(); return IsInRangeList(val, valList, sorted); }
static std::string generateXMLParameterString(const std::string& name, T data) { Teuchos::ParameterEntry entry = getEntry(name); std::stringstream ss; // TODO: check whether getAny().typeName() matches the typeid(T) // One could use a technique as described here: http://stackoverflow.com/questions/4484982/how-to-convert-typename-t-to-string-in-c ss << "<Parameter name=\"" << name << "\" type=\"" << entry.getAny().typeName() << "\" value=\"" << data << "\"/>"; return ss.str(); }
bool noValuesAreInRangeList(const Teuchos::ParameterEntry &e) { if (!e.isType<Teuchos::Array<Integral> >()) throw std::runtime_error("Should not call until modified"); Teuchos::Array<Integral> *valPtr=NULL; Teuchos::Array<Integral> &vals = e.getValue(valPtr); return noValuesAreInRangeList(vals); }
std::string filterValueToString(const Teuchos::ParameterEntry& entry ) { return ( entry.isList() ? std::string("...") : toString(entry.getAny()) ); }