Qt 4.8
qboolean.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qatomictype_p.h"
43 #include "qbuiltintypes_p.h"
44 #include "qcommonvalues_p.h"
45 #include "qdynamiccontext_p.h"
46 #include "qpatternistlocale_p.h"
47 #include "qvalidationerror_p.h"
48 
49 #include "qboolean_p.h"
50 
52 
53 using namespace QPatternist;
54 
57 {
58  return evaluateEBV(it->next(), it, context);
59 }
60 
61 bool Boolean::evaluateEBV(const Item &first,
62  const Item::Iterator::Ptr &it,
64 {
65  Q_ASSERT(it);
66  Q_ASSERT(context);
67 
68  if(!first)
69  return false;
70  else if(first.isNode())
71  return true;
72 
73  const Item second(it->next());
74 
75  if(second)
76  {
77  Q_ASSERT(context);
78  context->error(QtXmlPatterns::tr("Effective Boolean Value cannot be calculated for a sequence "
79  "containing two or more atomic values."),
81  QSourceLocation());
82  return false;
83  }
84  else
85  return first.as<AtomicValue>()->evaluateEBV(context);
86 }
87 
88 bool Boolean::evaluateEBV(const Item &item,
90 {
91  if(!item)
92  return false;
93  else if(item.isNode())
94  return true;
95  else
96  return item.as<AtomicValue>()->evaluateEBV(context);
97 }
98 
99 Boolean::Boolean(const bool value) : m_value(value)
100 {
101 }
102 
104 {
105  return m_value
108 }
109 
111 {
112  return m_value;
113 }
114 
116 {
118 }
119 
121 {
122  const QString val(lexical.trimmed()); /* Apply the whitespace facet. */
123 
124  if(val == QLatin1String("true") || val == QChar(QLatin1Char('1')))
126  else if(val == QLatin1String("false") || val == QChar(QLatin1Char('0')))
128  else
130 }
131 
133 {
135 }
136 
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
virtual ItemType::Ptr type() const
Definition: qboolean.cpp:132
static const AtomicValue::Ptr BooleanTrue
#define it(className, varName)
static AtomicValue::Ptr createError(const QString &description=QString(), const ReportContext::ErrorCode=ReportContext::FORG0001)
The QExplicitlySharedDataPointer class represents a pointer to an explicitly shared object...
Definition: qshareddata.h:136
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
static bool evaluateEBV(const Item::Iterator::Ptr &e, const QExplicitlySharedDataPointer< DynamicContext > &)
Definition: qboolean.cpp:55
The QString class provides a Unicode character string.
Definition: qstring.h:83
bool isNode() const
Determines whether this item is an atomic value, or a node.
Definition: qitem_p.h:349
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
The QChar class provides a 16-bit Unicode character.
Definition: qchar.h:72
virtual QString stringValue() const
Definition: qboolean.cpp:103
Boolean(const bool value)
Definition: qboolean.cpp:99
static const AtomicValue::Ptr FalseString
static AtomicValue::Ptr fromLexical(const QString &val)
Definition: qboolean.cpp:120
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
void error(const QString &message, const ReportContext::ErrorCode errorCode, const QSourceLocation &sourceLocation)
Base class for all classes representing atomic values.
Definition: qitem_p.h:118
QString trimmed() const Q_REQUIRED_RESULT
Returns a string that has whitespace removed from the start and the end.
Definition: qstring.cpp:4506
The namespace for the internal API of QtXmlPatterns.
The QSourceLocation class identifies a location in a resource by URI, line, and column.
virtual QString stringValue() const =0
static Boolean::Ptr fromValue(const bool value)
Definition: qboolean.cpp:115
bool value() const
Definition: qboolean_p.h:109
Contains functions used for formatting arguments, such as keywords and paths, in translated strings...
Represents an item in the XPath 2.0 Data Model.
Definition: qitem_p.h:182
static const AtomicValue::Ptr TrueString
static const AtomicType::Ptr xsBoolean
TCastTarget * as() const
Definition: qitem_p.h:278
static const AtomicValue::Ptr BooleanFalse
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
Definition: qchar.h:55
const bool m_value
Definition: qboolean_p.h:119