source: trunk/src/xmlpatterns/expr/qgeneralcomparison.cpp@ 617

Last change on this file since 617 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

File size: 10.5 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtXmlPatterns module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qbuiltintypes_p.h"
43#include "qcommonsequencetypes_p.h"
44#include "qcommonvalues_p.h"
45#include "qebvextractor_p.h"
46#include "qitem_p.h"
47#include "qliteral_p.h"
48#include "qoptimizationpasses_p.h"
49#include "quntypedatomicconverter_p.h"
50#include "qvaluecomparison_p.h"
51
52#include "qgeneralcomparison_p.h"
53
54QT_BEGIN_NAMESPACE
55
56using namespace QPatternist;
57
58GeneralComparison::GeneralComparison(const Expression::Ptr &op1,
59 const AtomicComparator::Operator op,
60 const Expression::Ptr &op2,
61 const bool isBackwardsCompat) : PairContainer(op1, op2)
62 , m_operator(op)
63 , m_isBackwardsCompat(isBackwardsCompat)
64{
65}
66
67bool GeneralComparison::generalCompare(const Item &op1,
68 const Item &op2,
69 const DynamicContext::Ptr &context) const
70{
71 Q_ASSERT(op1);
72 Q_ASSERT(op2);
73
74 if(comparator())
75 return compare(op1, op2, comparator(), m_operator);
76
77 Expression::Ptr a1(new Literal(op1));
78 Expression::Ptr a2(new Literal(op2));
79
80 const AtomicComparator::Ptr comp(fetchGeneralComparator(a1, a2, context));
81 /* The fetchGeneralComparator call may rewrite a1 and/or a2. */
82 Q_ASSERT(a1);
83 Q_ASSERT(a2);
84 Q_ASSERT(comp);
85
86 return compare(a1->evaluateSingleton(context),
87 a2->evaluateSingleton(context),
88 comp,
89 m_operator);
90}
91
92bool GeneralComparison::evaluateEBV(const DynamicContext::Ptr &context) const
93{
94 const Item::Iterator::Ptr it1(m_operand1->evaluateSequence(context));
95 Item item1(it1->next());
96
97 if(!item1)
98 return false;