Qt 4.8
Public Types | Public Functions | Static Public Functions | Protected Functions | List of all members
QPatternist::AtomicValue Class Referenceabstract

Base class for all classes representing atomic values. More...

#include <qitem_p.h>

Inheritance diagram for QPatternist::AtomicValue:
QSharedData QPatternist::CppCastingHelper< AtomicValue > QPatternist::DerivedString< TypeID > QPatternist::DerivedString< TypeLanguage > QPatternist::DerivedString< TypeToken > QPatternist::AbstractDateTime QPatternist::AbstractDuration QPatternist::AtomicString QPatternist::Base64Binary QPatternist::Boolean QPatternist::DerivedString< DerivedType > QPatternist::Numeric QPatternist::QNameValue QPatternist::SortTuple QPatternist::ValidationError

Public Types

typedef QList< AtomicValue::PtrList
 
typedef QExplicitlySharedDataPointer< AtomicValuePtr
 

Public Functions

virtual bool evaluateEBV (const QExplicitlySharedDataPointer< DynamicContext > &context) const
 
virtual bool hasError () const
 
virtual QString stringValue () const =0
 
virtual ItemType::Ptr type () const =0
 
virtual ~AtomicValue ()
 
- Public Functions inherited from QSharedData
 QSharedData ()
 Constructs a QSharedData object with a reference count of 0. More...
 
 QSharedData (const QSharedData &)
 Constructs a QSharedData object with reference count 0. More...
 
- Public Functions inherited from QPatternist::CppCastingHelper< AtomicValue >
const TCastTarget * as () const
 
TCastTarget * as ()
 

Static Public Functions

static ItemType::Ptr qtToXDMType (const QXmlItem &item)
 
static QVariant toQt (const AtomicValue *const value)
 
static QVariant toQt (const AtomicValue::Ptr &value)
 
static Item toXDM (const QVariant &value)
 

Protected Functions

 AtomicValue ()
 
- Protected Functions inherited from QPatternist::CppCastingHelper< AtomicValue >
 CppCastingHelper ()
 

Additional Inherited Members

- Public Variables inherited from QSharedData
QAtomicInt ref
 

Detailed Description

Base class for all classes representing atomic values.

Instantiating AtomicValues sub classes from a value of somekind, for a certain type is done in three different ways:

For types that does not distinguish the value space and lexical space, such as xs:string, only the fromValue() function exist, and fromLexical() is omitted.

Author
Frans Englich frans.nosp@m..eng.nosp@m.lich@.nosp@m.noki.nosp@m.a.com

Definition at line 118 of file qitem_p.h.

Typedefs

◆ List

A list if smart pointers wrapping AtomicValue instances.

Definition at line 132 of file qitem_p.h.

◆ Ptr

A smart pointer wrapping AtomicValue instances.

Definition at line 127 of file qitem_p.h.

Constructors and Destructors

◆ ~AtomicValue()

AtomicValue::~AtomicValue ( )
virtual

Definition at line 73 of file qatomicvalue.cpp.

74 {
75 }

◆ AtomicValue()

QPatternist::AtomicValue::AtomicValue ( )
inlineprotected

Definition at line 166 of file qitem_p.h.

167  {
168  }

Functions

◆ evaluateEBV()

bool AtomicValue::evaluateEBV ( const QExplicitlySharedDataPointer< DynamicContext > &  context) const
virtual

Always fails by issuing the type error ReportContext::FORG0006. Sub-classes whose represented type do allow EBV to be extracted from, must thus re-implement this function.

Reimplemented in QPatternist::DerivedInteger< DerivedType >, QPatternist::DerivedString< DerivedType >, QPatternist::DerivedString< TypeLanguage >, QPatternist::DerivedString< TypeID >, QPatternist::DerivedString< TypeToken >, QPatternist::Boolean, QPatternist::AtomicString, QPatternist::Decimal, QPatternist::AbstractFloat< isDouble >, and QPatternist::Integer.

Definition at line 77 of file qatomicvalue.cpp.

Referenced by QPatternist::BooleanToDecimalCaster::castFrom(), and QPatternist::BooleanToIntegerCaster::castFrom().

78 {
79  context->error(QtXmlPatterns::tr("A value of type %1 cannot have an "
80  "Effective Boolean Value.")
81  .arg(formatType(context->namePool(), type())),
83  QSourceLocation());
84  return false; /* Silence GCC warning. */
85 }
virtual NamePool::Ptr namePool() const =0
QString formatType(const NamePool::Ptr &np, const T &type)
Formats ItemType and SequenceType.
void error(const QString &message, const ReportContext::ErrorCode errorCode, const QSourceLocation &sourceLocation)
virtual ItemType::Ptr type() const =0
The QSourceLocation class identifies a location in a resource by URI, line, and column.

◆ hasError()

bool AtomicValue::hasError ( ) const
virtual

Determines whether this atomic value has an error. This is used for implementing casting.

Returns
always false

Reimplemented in QPatternist::SortTuple, and QPatternist::ValidationError.

Definition at line 87 of file qatomicvalue.cpp.

Referenced by QPatternist::XsdSchemaChecker::checkConstrainingFacets(), QPatternist::XsdSchemaHelper::constructAndCompare(), QPatternist::NumberFN::evaluateSingleton(), QPatternist::XsdTypeChecker::isValidString(), isValidUri(), QPatternist::XsdSchemaParser::parseComplexContent(), QPatternist::XsdSchemaParser::parseDefaultOpenContent(), QPatternist::XsdSchemaParser::parseEnumerationFacet(), QPatternist::XsdSchemaParser::parseFractionDigitsFacet(), QPatternist::XsdSchemaParser::parseGlobalComplexType(), QPatternist::XsdSchemaParser::parseGlobalElement(), QPatternist::XsdSchemaParser::parseLengthFacet(), QPatternist::XsdSchemaParser::parseLocalComplexType(), QPatternist::XsdSchemaParser::parseLocalElement(), QPatternist::XsdSchemaParser::parseMaxExclusiveFacet(), QPatternist::XsdSchemaParser::parseMaxInclusiveFacet(), QPatternist::XsdSchemaParser::parseMaxLengthFacet(), QPatternist::XsdSchemaParser::parseMinExclusiveFacet(), QPatternist::XsdSchemaParser::parseMinInclusiveFacet(), QPatternist::XsdSchemaParser::parseMinLengthFacet(), QPatternist::XsdSchemaParser::parseMinMaxConstraint(), QPatternist::XsdSchemaParser::parseNotation(), QPatternist::XsdSchemaParser::parsePatternFacet(), QPatternist::XsdSchemaParser::parseTotalDigitsFacet(), QPatternist::XsdSchemaParser::parseWhiteSpaceFacet(), QPatternist::XsdSchemaParser::readXPathExpression(), QPatternist::XsdValidatingInstanceReader::validateElement(), and QPatternist::XsdSchemaParser::validateIdAttribute().

88 {
89  return false;
90 }

◆ qtToXDMType()

ItemType::Ptr AtomicValue::qtToXDMType ( const QXmlItem item)
static

Definition at line 192 of file qatomicvalue.cpp.

Referenced by QPatternist::VariableLoader::announceExternalVariable(), QXmlQueryPrivate::staticContext(), and toQt().

193 {
194  Q_ASSERT(!item.isNull());
195 
196  if(item.isNull())
197  return ItemType::Ptr();
198 
199  if(item.isNode())
200  return BuiltinTypes::node;
201 
202  Q_ASSERT(item.isAtomicValue());
203  const QVariant v(item.toAtomicValue());
204 
205  switch(int(v.type()))
206  {
207  case QVariant::Char:
208  /* Fallthrough. */
209  case QVariant::String:
210  /* Fallthrough. */
211  case QVariant::Url:
212  return BuiltinTypes::xsString;
213  case QVariant::Bool:
215  case QVariant::ByteArray:
217  case QVariant::Int:
218  /* Fallthrough. */
219  case QVariant::LongLong:
221  case QVariant::ULongLong:
223  case QVariant::Date:
224  return BuiltinTypes::xsDate;
225  case QVariant::DateTime:
226  /* Fallthrough. */
227  case QVariant::Time:
229  case QMetaType::Float:
230  return BuiltinTypes::xsFloat;
231  case QVariant::Double:
232  return BuiltinTypes::xsDouble;
233  default:
234  return ItemType::Ptr();
235  }
236 }
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:92
static const AtomicType::Ptr xsBase64Binary
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
static const AtomicType::Ptr xsString
bool isNode() const
Returns true if this item is a Node.
static const AtomicType::Ptr xsDateTime
static const AtomicType::Ptr xsDouble
QVariant toAtomicValue() const
If this QXmlItem represents an atomic value, it is converted to an appropriate QVariant and returned...
static const AnyNodeType::Ptr node
QExplicitlySharedDataPointer< ItemType > Ptr
Definition: qitemtype_p.h:88
bool isAtomicValue() const
Returns true if this item is an atomic value.
static const AtomicType::Ptr xsFloat
static const AtomicType::Ptr xsInteger
static const AtomicType::Ptr xsBoolean
static const AtomicType::Ptr xsDate
static const AtomicType::Ptr xsUnsignedLong
bool isNull() const
Returns true if this QXmlItem is neither a node nor an atomic value.

◆ stringValue()

virtual QString QPatternist::AtomicValue::stringValue ( ) const
pure virtual

◆ toQt() [1/2]

QVariant AtomicValue::toQt ( const AtomicValue *const  value)
static

Converts value to a QVariant.

Definition at line 92 of file qatomicvalue.cpp.

Referenced by QAbstractXmlReceiver::item(), QXmlItem::toAtomicValue(), and toQt().

93 {
94  Q_ASSERT_X(value, Q_FUNC_INFO,
95  "Internal error, a null pointer cannot be passed.");
96 
97  const ItemType::Ptr t(value->type());
98 
99  if(BuiltinTypes::xsString->xdtTypeMatches(t)
100  || BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t)
101  || BuiltinTypes::xsAnyURI->xdtTypeMatches(t))
102  return value->stringValue();
103  /* Note, this occurs before the xsInteger test, since xs:unsignedLong
104  * is a subtype of it. */
105  else if(*BuiltinTypes::xsUnsignedLong == *t)
107  else if(BuiltinTypes::xsInteger->xdtTypeMatches(t))
108  return QVariant(value->as<Numeric>()->toInteger());
109  else if(BuiltinTypes::xsFloat->xdtTypeMatches(t)
110  || BuiltinTypes::xsDouble->xdtTypeMatches(t)
111  || BuiltinTypes::xsDecimal->xdtTypeMatches(t))
112  return QVariant(value->as<Numeric>()->toDouble());
113  /* We currently does not support xs:time. */
114  else if(BuiltinTypes::xsDateTime->xdtTypeMatches(t))
115  return QVariant(value->as<AbstractDateTime>()->toDateTime());
116  else if(BuiltinTypes::xsDate->xdtTypeMatches(t))
117  return QVariant(value->as<AbstractDateTime>()->toDateTime().toUTC().date());
118  else if(BuiltinTypes::xsBoolean->xdtTypeMatches(t))
119  return QVariant(value->as<Boolean>()->value());
120  else if(BuiltinTypes::xsBase64Binary->xdtTypeMatches(t)
121  || BuiltinTypes::xsHexBinary->xdtTypeMatches(t))
122  return QVariant(value->as<Base64Binary>()->asByteArray());
123  else if(BuiltinTypes::xsQName->xdtTypeMatches(t))
124  return QVariant::fromValue(value->as<QNameValue>()->qName());
125  else
126  {
127  /* A type we don't support in Qt. Includes xs:time currently. */
128  return QVariant();
129  }
130 }
The QVariant class acts like a union for the most common Qt data types.
Definition: qvariant.h:92
static const AtomicType::Ptr xsBase64Binary
Base class for classes implementing values related to time, date or both.
StorageType storedValue() const
static const AtomicType::Ptr xsString
QXmlName qName() const
Definition: qqnamevalue_p.h:96
const TCastTarget * as() const
static const AtomicType::Ptr xsDateTime
virtual ItemType::Ptr type() const =0
static const AtomicType::Ptr xsDouble
virtual QString stringValue() const =0
const QDateTime & toDateTime() const
bool value() const
Definition: qboolean_p.h:109
static QVariant fromValue(const T &value)
Returns a QVariant containing a copy of value.
Definition: qvariant.h:336
QDateTime toUTC() const
Returns a datetime containing the date and time information in this datetime, but specified using the...
Definition: qdatetime.h:251
static const AtomicType::Ptr xsUntypedAtomic
Implements the value instance of the xs:boolean type.
Definition: qboolean_p.h:69
QDate date() const
Returns the date part of the datetime.
Definition: qdatetime.cpp:2357
#define Q_ASSERT_X(cond, where, what)
Definition: qglobal.h:1837
static const AtomicType::Ptr xsQName
Base class for all numeric values.
virtual xsInteger toInteger() const =0
static const AtomicType::Ptr xsFloat
Implements the value instance of the xs:QName type.
Definition: qqnamevalue_p.h:73
virtual xsDouble toDouble() const =0
static const AtomicType::Ptr xsInteger
const QByteArray & asByteArray() const
static const AtomicType::Ptr xsDecimal
static const AtomicType::Ptr xsBoolean
Represents instances of derived xs:integer types, such as xs:byte.
static const AtomicType::Ptr xsDate
Implements the value instance of the xs:base64Binary type.
static const AtomicType::Ptr xsHexBinary
static const AtomicType::Ptr xsUnsignedLong
static const AtomicType::Ptr xsAnyURI
#define Q_FUNC_INFO
Definition: qglobal.h:1871

◆ toQt() [2/2]

static QVariant QPatternist::AtomicValue::toQt ( const AtomicValue::Ptr value)
inlinestatic

Definition at line 157 of file qitem_p.h.

158  {
159  return toQt(value.data());
160  }
static QVariant toQt(const AtomicValue *const value)

◆ toXDM()

Item AtomicValue::toXDM ( const QVariant value)
static

Definition at line 132 of file qatomicvalue.cpp.

Referenced by QPatternist::VariantListIterator::inputToOutputItem(), QPatternist::VariableLoader::itemForName(), QXmlItem::QXmlItem(), and toQt().

133 {
134  Q_ASSERT_X(value.isValid(), Q_FUNC_INFO,
135  "QVariants sent to Patternist must be valid.");
136 
137  switch(value.userType())
138  {
139  case QVariant::Char:
140  /* Fallthrough. A single codepoint is a string in XQuery. */
141  case QVariant::String:
142  return AtomicString::fromValue(value.toString());
143  case QVariant::Url:
144  {
145  /* QUrl doesn't follow the spec properly, so we
146  * have to let it be an xs:string. Calling QVariant::toString()
147  * on a QVariant that contains a QUrl returns, surprisingly,
148  * an empty string. */
149  return AtomicString::fromValue(value.toUrl().toString());
150  }
151  case QVariant::ByteArray:
152  return HexBinary::fromValue(value.toByteArray());
153  case QVariant::Int:
154  /* Fallthrough. */
155  case QVariant::LongLong:
156  /* Fallthrough. */
157  case QVariant::UInt:
158  return Integer::fromValue(value.toLongLong());
159  case QVariant::ULongLong:
161  case QVariant::Bool:
162  return Boolean::fromValue(value.toBool());
163  case QVariant::Time:
164  return SchemaTime::fromDateTime(value.toDateTime());
165  case QVariant::Date:
166  return Date::fromDateTime(QDateTime(value.toDate(), QTime(), Qt::UTC));
167  case QVariant::DateTime:
168  return DateTime::fromDateTime(value.toDateTime());
169  case QMetaType::Float:
170  return Item(Double::fromValue(value.toFloat()));
171  case QVariant::Double:
172  return Item(Double::fromValue(value.toDouble()));
173  default:
174  {
175  if (value.userType() == qMetaTypeId<float>())
176  {
177  return Item(Float::fromValue(value.value<float>()));
178  }
179  else {
180  Q_ASSERT_X(false,
181  Q_FUNC_INFO,
183  "QVariants of type %1 are not supported in "
184  "Patternist, see the documentation")
185  .arg(QLatin1String(value.typeName()))));
186  return AtomicValue::Ptr();
187  }
188  }
189  }
190 }
QExplicitlySharedDataPointer< AtomicValue > Ptr
Definition: qitem_p.h:127
QString toString(FormattingOptions options=None) const
Returns the human-displayable string representation of the URL.
Definition: qurl.cpp:5896
static Date::Ptr fromDateTime(const QDateTime &date)
Definition: qdate.cpp:88
QString toString() const
Returns the variant as a QString if the variant has type() String , Bool , ByteArray ...
Definition: qvariant.cpp:2270
QDateTime toDateTime() const
Returns the variant as a QDateTime if the variant has type() DateTime , Date , or String ; otherwise ...
Definition: qvariant.cpp:2349
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
bool toBool() const
Returns the variant as a bool if the variant has type() Bool.
Definition: qvariant.cpp:2691
static DateTime::Ptr fromDateTime(const QDateTime &dt)
static Item fromValue(const xsInteger num)
Definition: qinteger.cpp:52
static AtomicString::Ptr fromValue(const QString &value)
QByteArray toByteArray() const
Returns the variant as a QByteArray if the variant has type() ByteArray or String (converted using QS...
Definition: qvariant.cpp:2383
The QTime class provides clock time functions.
Definition: qdatetime.h:148
qlonglong toLongLong(bool *ok=0) const
Returns the variant as a long long int if the variant has type() LongLong , Bool , ByteArray , Char , Double , Int , String , UInt , or ULongLong ; otherwise returns 0.
Definition: qvariant.cpp:2659
qulonglong toULongLong(bool *ok=0) const
Returns the variant as as an unsigned long long int if the variant has type() ULongLong ...
Definition: qvariant.cpp:2675
static Boolean::Ptr fromValue(const bool value)
Definition: qboolean.cpp:115
const char * typeName() const
Returns the name of the type stored in the variant.
Definition: qvariant.cpp:1984
QUrl toUrl() const
Returns the variant as a QUrl if the variant has type() Url ; otherwise returns an invalid QUrl...
Definition: qvariant.cpp:2528
QDate toDate() const
Returns the variant as a QDate if the variant has type() Date , DateTime , or String ; otherwise retu...
Definition: qvariant.cpp:2311
#define Q_ASSERT_X(cond, where, what)
Definition: qglobal.h:1837
int userType() const
Returns the storage type of the value stored in the variant.
Definition: qvariant.cpp:1913
The QDateTime class provides date and time functions.
Definition: qdatetime.h:216
Represents an item in the XPath 2.0 Data Model.
Definition: qitem_p.h:182
static QString fromLatin1(const char *, int size=-1)
Returns a QString initialized with the first size characters of the Latin-1 string str...
Definition: qstring.cpp:4188
static Numeric::Ptr fromValue(const xsDouble num)
float toFloat(bool *ok=0) const
Returns the variant as a float if the variant has type() Double , QMetaType::Float ...
Definition: qvariant.cpp:2725
static SchemaTime::Ptr fromDateTime(const QDateTime &dt)
Definition: qschematime.cpp:87
double toDouble(bool *ok=0) const
Returns the variant as a double if the variant has type() Double , QMetaType::Float ...
Definition: qvariant.cpp:2710
static HexBinary::Ptr fromValue(const QByteArray &data)
Definition: qhexbinary.cpp:123
static AtomicValue::Ptr fromValueUnchecked(const TemporaryStorageType num)
T value() const
Returns the stored value converted to the template type T.
Definition: qvariant.h:332
bool isValid() const
Returns true if the storage type of this variant is not QVariant::Invalid; otherwise returns false...
Definition: qvariant.h:485
#define qPrintable(string)
Definition: qglobal.h:1750
#define Q_FUNC_INFO
Definition: qglobal.h:1871

◆ type()

virtual ItemType::Ptr QPatternist::AtomicValue::type ( ) const
pure virtual

The documentation for this class was generated from the following files: