dom/xslt/xpath/txPredicatedNodeTest.cpp

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:590f7328555d
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "txExpr.h"
7 #include "txExprResult.h"
8 #include "txSingleNodeContext.h"
9
10 txPredicatedNodeTest::txPredicatedNodeTest(txNodeTest* aNodeTest,
11 Expr* aPredicate)
12 : mNodeTest(aNodeTest),
13 mPredicate(aPredicate)
14 {
15 NS_ASSERTION(!mPredicate->isSensitiveTo(Expr::NODESET_CONTEXT),
16 "predicate must not be context-nodeset-sensitive");
17 }
18
19 bool
20 txPredicatedNodeTest::matches(const txXPathNode& aNode,
21 txIMatchContext* aContext)
22 {
23 if (!mNodeTest->matches(aNode, aContext)) {
24 return false;
25 }
26
27 txSingleNodeContext context(aNode, aContext);
28 nsRefPtr<txAExprResult> res;
29 nsresult rv = mPredicate->evaluate(&context, getter_AddRefs(res));
30 NS_ENSURE_SUCCESS(rv, false);
31
32 return res->booleanValue();
33 }
34
35 double
36 txPredicatedNodeTest::getDefaultPriority()
37 {
38 return 0.5;
39 }
40
41 bool
42 txPredicatedNodeTest::isSensitiveTo(Expr::ContextSensitivity aContext)
43 {
44 return mNodeTest->isSensitiveTo(aContext) ||
45 mPredicate->isSensitiveTo(aContext);
46 }
47
48 #ifdef TX_TO_STRING
49 void
50 txPredicatedNodeTest::toString(nsAString& aDest)
51 {
52 mNodeTest->toString(aDest);
53 aDest.Append(char16_t('['));
54 mPredicate->toString(aDest);
55 aDest.Append(char16_t(']'));
56 }
57 #endif

mercurial