bool OsmAnd::BinaryOperator::evaluate( const QBitArray& types, RoutingRulesetContext* const context ) const
{
    bool ok = false;

    float lValue;
    if(!_lTagRef.isEmpty())
        ok = RoutingRuleExpression::resolveTagReferenceValue(context, types, _lTagRef, type, lValue);
    else if(!_lVariableRef.isEmpty())
        ok = RoutingRuleExpression::resolveVariableReferenceValue(context, _lVariableRef, type, lValue);
    else
    {
        lValue = _lValue;
        ok = true;
    }
    if(!ok)
        return false;
    
    ok = false;
    float rValue;
    if(!_rTagRef.isEmpty())
        ok = RoutingRuleExpression::resolveTagReferenceValue(context, types, _rTagRef, type, rValue);
    else if(!_rVariableRef.isEmpty())
        ok = RoutingRuleExpression::resolveVariableReferenceValue(context, _rVariableRef, type, rValue);
    else
    {
        rValue = _rValue;
        ok = true;
    }
    if(!ok)
        return false;
    
    return evaluateValues(lValue, rValue);
}
  inline
  void panzer::BasisValues<Scalar,Array>::
  evaluateValues(const Array& cub_points,
		 const Array& jac,
 	 	 const Array& jac_det,
		 const Array& jac_inv)
  { 
     // substitute dummy array for weighted measure
     evaluateValues(cub_points,jac,jac_det,jac_inv,dummyArray,dummyArray);
  }