提交 a490efdc 编写于 作者: M Matt Pharr

ParameterDictionary: issue error on mismatch of parameter type and provided values

Before, e.g. "float foo" "bar" would not lead to an error being issued.
上级 faac34d1
......@@ -159,19 +159,34 @@ ParameterDictionary::ParameterDictionary(ParsedParameterVector p0,
}
void ParameterDictionary::checkParameterTypes() {
for (const ParsedParameter *p : params)
if (p->type != ParameterTypeTraits<ParameterType::Boolean>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Float>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Integer>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Point2f>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Vector2f>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Point3f>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Vector3f>::typeName &&
p->type != ParameterTypeTraits<ParameterType::Normal3f>::typeName &&
p->type != ParameterTypeTraits<ParameterType::String>::typeName &&
p->type != "texture" && p->type != "rgb" && p->type != "spectrum" &&
p->type != "blackbody")
ErrorExit(&p->loc, "%s: unknown parameter type", p->type);
for (const ParsedParameter *p : params) {
if (p->type == ParameterTypeTraits<ParameterType::Boolean>::typeName) {
if (p->bools.empty())
ErrorExit(&p->loc, "\"%s\": non-Boolean values provided for Boolean-valued parameter",
p->name);
} else if (p->type == ParameterTypeTraits<ParameterType::Float>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Integer>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Point2f>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Vector2f>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Point3f>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Vector3f>::typeName ||
p->type == ParameterTypeTraits<ParameterType::Normal3f>::typeName ||
p->type == "rgb" || p->type == "blackbody") {
if (p->ints.empty() && p->floats.empty())
ErrorExit(&p->loc, "\"%s\": non-numeric values provided for numeric-valued parameter",
p->name);
} else if (p->type == ParameterTypeTraits<ParameterType::String>::typeName ||
p->type == "texture") {
if (p->strings.empty())
ErrorExit(&p->loc, "\"%s\": non-string values provided for string-valued parameter",
p->name);
} else if (p->type == "spectrum") {
if (p->strings.empty() && p->ints.empty() && p->floats.empty())
ErrorExit(&p->loc, "\"%s\": expecting string or numeric-valued parameter for spectrum parameter",
p->name);
} else
ErrorExit(&p->loc, "\"%s\": unknown parameter type", p->type);
}
}
// ParameterDictionary Method Definitions
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册