15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright 2005 Frerich Raabe <raabe@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Apple Computer, Inc. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 1402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef XPathPredicate_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define XPathPredicate_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathExpressionNode.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/xml/XPathValue.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)namespace XPath { 365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class Number FINAL : public Expression { 385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) explicit Number(double); 405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::NumberValue; } 455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Value m_value; 475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class StringExpression FINAL : public Expression { 505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) explicit StringExpression(const String&); 525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 55197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::StringValue; } 575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Value m_value; 595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class Negative FINAL : public Expression { 625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 63197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::NumberValue; } 655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class NumericOp FINAL : public Expression { 685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) enum Opcode { 705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) OP_Add, OP_Sub, OP_Mul, OP_Div, OP_Mod 715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }; 725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) NumericOp(Opcode, PassOwnPtrWillBeRawPtr<Expression> lhs, PassOwnPtrWillBeRawPtr<Expression> rhs); 735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 75197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::NumberValue; } 775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Opcode m_opcode; 795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class EqTestOp FINAL : public Expression { 825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) enum Opcode { OpcodeEqual, OpcodeNotEqual, OpcodeGreaterThan, OpcodeLessThan, OpcodeGreaterOrEqual, OpcodeLessOrEqual }; 845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) EqTestOp(Opcode, PassOwnPtrWillBeRawPtr<Expression> lhs, PassOwnPtrWillBeRawPtr<Expression> rhs); 85197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::BooleanValue; } 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool compare(EvaluationContext&, const Value&, const Value&) const; 905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Opcode m_opcode; 925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class LogicalOp FINAL : public Expression { 955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) enum Opcode { OP_And, OP_Or }; 975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) LogicalOp(Opcode, PassOwnPtrWillBeRawPtr<Expression> lhs, PassOwnPtrWillBeRawPtr<Expression> rhs); 985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::BooleanValue; } 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool shortCircuitOn() const; 102197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 1035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Opcode m_opcode; 1055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 1065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class Union FINAL : public Expression { 1085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 109197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual Value evaluate(EvaluationContext&) const OVERRIDE; 1105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) virtual Value::Type resultType() const OVERRIDE { return Value::NodeSetValue; } 1115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 1125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class Predicate FINAL : public NoBaseWillBeGarbageCollected<Predicate> { 1145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(Predicate); WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; 1155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Predicate); 1165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)public: 1175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) explicit Predicate(PassOwnPtrWillBeRawPtr<Expression>); 1185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void trace(Visitor*); 1195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool evaluate(EvaluationContext&) const; 1215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool isContextPositionSensitive() const { return m_expr->isContextPositionSensitive() || m_expr->resultType() == Value::NumberValue; } 1225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bool isContextSizeSensitive() const { return m_expr->isContextSizeSensitive(); } 1235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)private: 1255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) OwnPtrWillBeMember<Expression> m_expr; 1265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // XPathPredicate_h 132