1/* 2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> 3 * Copyright (C) 2006, 2009 Apple Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#ifndef XPathPath_h 28#define XPathPath_h 29 30#include "XPathExpressionNode.h" 31#include "XPathNodeSet.h" 32 33namespace WebCore { 34 35 namespace XPath { 36 37 class Predicate; 38 class Step; 39 40 class Filter : public Expression { 41 public: 42 Filter(Expression*, const Vector<Predicate*>& = Vector<Predicate*>()); 43 virtual ~Filter(); 44 45 virtual Value evaluate() const; 46 47 private: 48 virtual Value::Type resultType() const { return Value::NodeSetValue; } 49 50 Expression* m_expr; 51 Vector<Predicate*> m_predicates; 52 }; 53 54 class LocationPath : public Expression { 55 public: 56 LocationPath(); 57 virtual ~LocationPath(); 58 void setAbsolute(bool value) { m_absolute = value; setIsContextNodeSensitive(!m_absolute); } 59 60 virtual Value evaluate() const; 61 void evaluate(NodeSet& nodes) const; // nodes is an input/output parameter 62 63 void appendStep(Step* step); 64 void insertFirstStep(Step* step); 65 66 private: 67 virtual Value::Type resultType() const { return Value::NodeSetValue; } 68 69 Vector<Step*> m_steps; 70 bool m_absolute; 71 }; 72 73 class Path : public Expression { 74 public: 75 Path(Filter*, LocationPath*); 76 virtual ~Path(); 77 78 virtual Value evaluate() const; 79 80 private: 81 virtual Value::Type resultType() const { return Value::NodeSetValue; } 82 83 Filter* m_filter; 84 LocationPath* m_path; 85 }; 86 87 } 88} 89 90#endif // XPath_Path_H 91