本文整理汇总了C++中StyleContext::evalFilter方法的典型用法代码示例。如果您正苦于以下问题:C++ StyleContext::evalFilter方法的具体用法?C++ StyleContext::evalFilter怎么用?C++ StyleContext::evalFilter使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StyleContext
的用法示例。
在下文中一共展示了StyleContext::evalFilter方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: eval
bool Filter::eval(const Feature& feat, StyleContext& ctx) const {
switch (data.get_type_index()) {
case Data::type<OperatorAny>::value: {
for (const auto& filt : data.get<OperatorAny>().operands) {
if (filt.eval(feat, ctx)) { return true; }
}
return false;
}
case Data::type<OperatorAll>::value: {
for (const auto& filt : data.get<OperatorAll>().operands) {
if (!filt.eval(feat, ctx)) { return false; }
}
return true;
}
case Data::type<OperatorNone>::value: {
for (const auto& filt : data.get<OperatorNone>().operands) {
if (filt.eval(feat, ctx)) { return false; }
}
return true;
}
case Data::type<Existence>::value: {
auto& f = data.get<Existence>();
return f.exists == feat.props.contains(f.key);
}
case Data::type<Equality>::value: {
auto& f = data.get<Equality>();
if (f.global == FilterGlobal::undefined) {
auto& value = feat.props.get(f.key);
for (const auto& v : f.values) {
if (v == value) { return true; }
}
} else {
auto& global = ctx.getGlobal(f.global);
if (!global.is<none_type>()) {
for (const auto& v : f.values) {
if (v == global) { return true; }
}
return false;
}
}
return false;
}
case Data::type<Range>::value: {
auto& f = data.get<Range>();
if (f.global == FilterGlobal::undefined) {
auto& value = feat.props.get(f.key);
if (value.is<float>()) {
auto num = value.get<float>();
return num >= f.min && num < f.max;
}
if (value.is<int64_t>()) {
auto num = value.get<int64_t>();
return num >= f.min && num < f.max;
}
} else {
auto& global = ctx.getGlobal(f.global);
if (!global.is<none_type>()) {
// only check range for numbers
if (global.is<int64_t>()) {
auto num = global.get<int64_t>();
return num >= f.min && num < f.max;
}
if (global.is<float>()) {
auto num = global.get<float>();
return num >= f.min && num < f.max;
}
}
}
return false;
}
case Data::type<Function>::value: {
auto& f = data.get<Function>();
return ctx.evalFilter(f.id);
}
default:
return true;
}
// Cannot be reached
assert(false);
return false;
}