From 27f23fe4f9ab81c8b63a4bf47281354cef1d6337 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Fri, 26 Sep 2014 14:33:26 +0100 Subject: [PATCH] Allow isRun in Filter .. isRun is a bool, so isRun = 0 or isRun = 1 will filter for runs. .. note isRun does more than just look at sport it also checks if there are running data series in the file and may extend to more over time --- src/DataFilter.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/DataFilter.cpp b/src/DataFilter.cpp index 1bfcc59e6..ab0d3b2c2 100644 --- a/src/DataFilter.cpp +++ b/src/DataFilter.cpp @@ -92,7 +92,13 @@ bool Leaf::isNumber(DataFilter *df, Leaf *leaf) case Leaf::Float : return true; case Leaf::Integer : return true; case Leaf::String : return false; - case Leaf::Symbol : return df->lookupType.value(*(leaf->lvalue.n), false); + case Leaf::Symbol : + { + QString symbol = *(leaf->lvalue.n); + if (symbol == "isRun") return true; + else return df->lookupType.value(symbol, false); + } + break; case Leaf::Logical : return true; // not possible! case Leaf::Operation : return true; case Leaf::BinaryOperation : return true; @@ -136,9 +142,13 @@ void Leaf::validateFilter(DataFilter *df, Leaf *leaf) // if so set the type to meta or metric // and save the technical name used to do // a lookup at execution time - QString lookup = df->lookupMap.value(*(leaf->lvalue.n), ""); + QString symbol = *(leaf->lvalue.n); + QString lookup = df->lookupMap.value(symbol, ""); if (lookup == "") { - DataFiltererrors << QString(QObject::tr("%1 is unknown")).arg(*(leaf->lvalue.n)); + + // isRun isa special, we may add more later (e.g. date) + if (symbol != "isRun") + DataFiltererrors << QString(QObject::tr("%1 is unknown")).arg(symbol); } } break; @@ -390,9 +400,15 @@ double Leaf::eval(DataFilter *df, Leaf *leaf, SummaryMetrics m, QString f) case Leaf::Symbol : { QString rename; - // get symbol value - if ((lhsisNumber = df->lookupType.value(*(leaf->lvalue.l->lvalue.n))) == true) { + QString symbol = *(leaf->lvalue.l->lvalue.n); + // is it isRun ? + if (symbol == "isRun") { + lhsdouble = m.isRun() ? 1 : 0; + lhsisNumber = true; + + } else if ((lhsisNumber = df->lookupType.value(*(leaf->lvalue.l->lvalue.n))) == true) { + // get symbol value // check metadata string to number first ... QString meta = m.getText(rename=df->lookupMap.value(*(leaf->lvalue.l->lvalue.n),""), "unknown"); if (meta == "unknown") @@ -440,8 +456,16 @@ double Leaf::eval(DataFilter *df, Leaf *leaf, SummaryMetrics m, QString f) case Leaf::Symbol : { QString rename; + QString symbol = *(leaf->rvalue.l->lvalue.n); + + // is it isRun ? + if (symbol == "isRun") { + + rhsdouble = m.isRun() ? 1 : 0; + rhsisNumber = true; + // get symbol value - if ((rhsisNumber=df->lookupType.value(*(leaf->rvalue.l->lvalue.n))) == true) { + } else if ((rhsisNumber=df->lookupType.value(*(leaf->rvalue.l->lvalue.n))) == true) { // numeric QString meta = m.getText(rename=df->lookupMap.value(*(leaf->rvalue.l->lvalue.n),""), "unknown"); if (meta == "unknown")