OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> | 2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> |
3 * Copyright (C) 2006, 2009 Apple Inc. | 3 * Copyright (C) 2006, 2009 Apple Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 WTF_MAKE_FAST_ALLOCATED; | 54 WTF_MAKE_FAST_ALLOCATED; |
55 public: | 55 public: |
56 enum Kind { | 56 enum Kind { |
57 TextNodeTest, CommentNodeTest, ProcessingInstructionNodeTest, AnyNod
eTest, NameTest | 57 TextNodeTest, CommentNodeTest, ProcessingInstructionNodeTest, AnyNod
eTest, NameTest |
58 }; | 58 }; |
59 | 59 |
60 NodeTest(Kind kind) : m_kind(kind) { } | 60 NodeTest(Kind kind) : m_kind(kind) { } |
61 NodeTest(Kind kind, const String& data) : m_kind(kind), m_data(data) { } | 61 NodeTest(Kind kind, const String& data) : m_kind(kind), m_data(data) { } |
62 NodeTest(Kind kind, const String& data, const String& namespaceURI) : m_
kind(kind), m_data(data), m_namespaceURI(namespaceURI) { } | 62 NodeTest(Kind kind, const String& data, const String& namespaceURI) : m_
kind(kind), m_data(data), m_namespaceURI(namespaceURI) { } |
63 | 63 |
| 64 NodeTest(const NodeTest& o) |
| 65 : m_kind(o.m_kind) |
| 66 , m_data(o.m_data) |
| 67 , m_namespaceURI(o.m_namespaceURI) |
| 68 { |
| 69 ASSERT(o.m_mergedPredicates.isEmpty()); |
| 70 } |
| 71 NodeTest& operator=(const NodeTest& o) |
| 72 { |
| 73 m_kind = o.m_kind; |
| 74 m_data = o.m_data; |
| 75 m_namespaceURI = o.m_namespaceURI; |
| 76 ASSERT(o.m_mergedPredicates.isEmpty()); |
| 77 return *this; |
| 78 } |
| 79 |
64 Kind kind() const { return m_kind; } | 80 Kind kind() const { return m_kind; } |
65 const AtomicString& data() const { return m_data; } | 81 const AtomicString& data() const { return m_data; } |
66 const AtomicString& namespaceURI() const { return m_namespaceURI; } | 82 const AtomicString& namespaceURI() const { return m_namespaceURI; } |
67 Vector<Predicate*>& mergedPredicates() { return m_mergedPredicates; } | 83 Vector<OwnPtr<Predicate> >& mergedPredicates() { return m_mergedPredicat
es; } |
68 const Vector<Predicate*>& mergedPredicates() const { return m_mergedPred
icates; } | 84 const Vector<OwnPtr<Predicate> >& mergedPredicates() const { return m_me
rgedPredicates; } |
69 | 85 |
70 private: | 86 private: |
71 Kind m_kind; | 87 Kind m_kind; |
72 AtomicString m_data; | 88 AtomicString m_data; |
73 AtomicString m_namespaceURI; | 89 AtomicString m_namespaceURI; |
74 | 90 |
75 // When possible, we merge some or all predicates with node test for bet
ter performance. | 91 // When possible, we merge some or all predicates with node test for bet
ter performance. |
76 Vector<Predicate*> m_mergedPredicates; | 92 Vector<OwnPtr<Predicate> > m_mergedPredicates; |
77 }; | 93 }; |
78 | 94 |
79 Step(Axis, const NodeTest&, const Vector<Predicate*>& predicates = Vector<Pr
edicate*>()); | 95 Step(Axis, const NodeTest&); |
| 96 Step(Axis, const NodeTest&, Vector<OwnPtr<Predicate> >&); |
80 ~Step(); | 97 ~Step(); |
81 | 98 |
82 void optimize(); | 99 void optimize(); |
83 | 100 |
84 void evaluate(Node* context, NodeSet&) const; | 101 void evaluate(Node* context, NodeSet&) const; |
85 | 102 |
86 Axis axis() const { return m_axis; } | 103 Axis axis() const { return m_axis; } |
87 const NodeTest& nodeTest() const { return m_nodeTest; } | 104 const NodeTest& nodeTest() const { return m_nodeTest; } |
88 | 105 |
89 private: | 106 private: |
90 friend void optimizeStepPair(Step*, Step*, bool&); | 107 friend void optimizeStepPair(Step*, Step*, bool&); |
91 bool predicatesAreContextListInsensitive() const; | 108 bool predicatesAreContextListInsensitive() const; |
92 | 109 |
93 void parseNodeTest(const String&); | 110 void parseNodeTest(const String&); |
94 void nodesInAxis(Node* context, NodeSet&) const; | 111 void nodesInAxis(Node* context, NodeSet&) const; |
95 String namespaceFromNodetest(const String& nodeTest) const; | 112 String namespaceFromNodetest(const String& nodeTest) const; |
96 | 113 |
97 Axis m_axis; | 114 Axis m_axis; |
98 NodeTest m_nodeTest; | 115 NodeTest m_nodeTest; |
99 Vector<Predicate*> m_predicates; | 116 Vector<OwnPtr<Predicate> > m_predicates; |
100 }; | 117 }; |
101 | 118 |
102 void optimizeStepPair(Step*, Step*, bool& dropSecondStep); | 119 void optimizeStepPair(Step*, Step*, bool& dropSecondStep); |
103 | 120 |
104 } // namespace XPath | 121 } // namespace XPath |
105 | 122 |
106 } // namespace WebCore | 123 } // namespace WebCore |
107 | 124 |
108 #endif // XPathStep_h | 125 #endif // XPathStep_h |
OLD | NEW |