summaryrefslogtreecommitdiffstats
path: root/src/xmlpatterns/type/qbuiltinatomictypes_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmlpatterns/type/qbuiltinatomictypes_p.h')
-rw-r--r--src/xmlpatterns/type/qbuiltinatomictypes_p.h789
1 files changed, 789 insertions, 0 deletions
diff --git a/src/xmlpatterns/type/qbuiltinatomictypes_p.h b/src/xmlpatterns/type/qbuiltinatomictypes_p.h
new file mode 100644
index 0000000000..3906978279
--- /dev/null
+++ b/src/xmlpatterns/type/qbuiltinatomictypes_p.h
@@ -0,0 +1,789 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the QtXmlPatterns module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef Patternist_BuiltinAtomicTypes_H
+#define Patternist_BuiltinAtomicTypes_H
+
+#include "qatomiccasterlocators_p.h"
+#include "qatomiccomparatorlocators_p.h"
+#include "qbuiltinatomictype_p.h"
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+namespace QPatternist
+{
+
+ /**
+ * @short Implements the type @c xs:anyAtomicType.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class AnyAtomicType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<AnyAtomicType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ /**
+ * Overridden to return <tt>item()</tt>.
+ *
+ * @returns BuiltinTypes::item
+ */
+ virtual ItemType::Ptr xdtSuperType() const;
+
+ /**
+ * Overridden to return @c xs:anySimpleType.
+ *
+ * @returns BuiltinTypes::xsAnySimpleType
+ */
+ virtual SchemaType::Ptr wxsSuperType() const;
+
+ /**
+ * Overridden to return @c true, @c xs:anyAtomicType is abstract.
+ *
+ * @returns always @c true
+ */
+ virtual bool isAbstract() const;
+
+ protected:
+ friend class BuiltinTypes;
+ AnyAtomicType();
+ };
+
+ /**
+ * @short Implements the type @c xs:untypedAtomic.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class UntypedAtomicType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<UntypedAtomicType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ UntypedAtomicType();
+ };
+
+ /**
+ * @short Implements the type @c xs:dateTime.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DateTimeType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DateTimeType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+ protected:
+ friend class BuiltinTypes;
+ DateTimeType();
+ };
+
+ /**
+ * @short Implements the type @c xs:date.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DateType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DateType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ DateType();
+ };
+
+ /**
+ * @short Implements the type @c xs:time.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class SchemaTimeType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<SchemaTimeType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ SchemaTimeType();
+ };
+
+ /**
+ * @short Implements the type @c xs:duration.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DurationType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DurationType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ DurationType();
+ };
+
+ /**
+ * @short Implements the type @c xs:yearMonthDuration.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class YearMonthDurationType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<YearMonthDurationType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ YearMonthDurationType();
+ };
+
+ /**
+ * @short Implements the type @c xs:dayTimeDuration.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DayTimeDurationType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DayTimeDurationType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ DayTimeDurationType();
+ };
+
+ /**
+ * @short Implements the type @c xs:double.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DoubleType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DoubleType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ DoubleType();
+ };
+
+ /**
+ * @short Implements the type @c xs:float.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class FloatType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<FloatType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ FloatType();
+ friend class BuiltinTypes;
+ };
+
+ /**
+ * @short Implements the type @c xs:decimal.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class DecimalType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<DecimalType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ DecimalType();
+ };
+
+ /**
+ * @short Implements the type @c xs:integer.
+ *
+ * IntegerType instances are used for representing all different xs:integer
+ * types. The purpose of this is that xs:integer sub-types must use the
+ * class, IntegerType, in order to use the correct behavior in call
+ * dispatch situations. That is, all xs:integer sub-types must use the
+ * same AtomicComparator as xs:integer itself uses, and that is achieved
+ * this way.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class IntegerType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<IntegerType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ IntegerType(const AtomicType::Ptr &parentType,
+ const AtomicCasterLocator::Ptr &casterLocator);
+ };
+
+ template<TypeOfDerivedInteger derivedType>
+ class DerivedIntegerType : public IntegerType
+ {
+ public:
+ using IntegerType::accept;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &v,
+ const SourceLocationReflection *const r) const
+ {
+ return v->visit(this, r);
+ }
+
+ virtual QXmlName name(const NamePool::Ptr &np) const
+ {
+ switch(derivedType)
+ {
+ case TypeByte: return np->allocateQName(StandardNamespaces::xs, QLatin1String("byte"));
+ case TypeInt: return np->allocateQName(StandardNamespaces::xs, QLatin1String("int"));
+ case TypeLong: return np->allocateQName(StandardNamespaces::xs, QLatin1String("long"));
+ case TypeNegativeInteger: return np->allocateQName(StandardNamespaces::xs, QLatin1String("negativeInteger"));
+ case TypeNonNegativeInteger: return np->allocateQName(StandardNamespaces::xs, QLatin1String("nonNegativeInteger"));
+ case TypeNonPositiveInteger: return np->allocateQName(StandardNamespaces::xs, QLatin1String("nonPositiveInteger"));
+ case TypePositiveInteger: return np->allocateQName(StandardNamespaces::xs, QLatin1String("positiveInteger"));
+ case TypeShort: return np->allocateQName(StandardNamespaces::xs, QLatin1String("short"));
+ case TypeUnsignedByte: return np->allocateQName(StandardNamespaces::xs, QLatin1String("unsignedByte"));
+ case TypeUnsignedInt: return np->allocateQName(StandardNamespaces::xs, QLatin1String("unsignedInt"));
+ case TypeUnsignedLong: return np->allocateQName(StandardNamespaces::xs, QLatin1String("unsignedLong"));
+ case TypeUnsignedShort: return np->allocateQName(StandardNamespaces::xs, QLatin1String("unsignedShort"));
+ }
+
+ Q_ASSERT_X(false, "DerivedIntegerType::name()", "Invalid value in instantiation.");
+ return QXmlName();
+ }
+
+ virtual QString displayName(const NamePool::Ptr &np) const
+ {
+ return np->displayName(name(np));
+ }
+
+ protected:
+ friend class BuiltinTypes;
+
+ DerivedIntegerType(const AtomicType::Ptr &parentType,
+ const AtomicCasterLocator::Ptr &casterLoc) : IntegerType(parentType, casterLoc)
+ {
+ }
+
+ };
+
+ /**
+ * @short Implements the type @c xs:gYearMonth.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class GYearMonthType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<GYearMonthType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ GYearMonthType();
+ };
+
+ /**
+ * @short Implements the type @c xs:gYear.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class GYearType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<GYearType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ GYearType();
+ };
+
+ /**
+ * @short Implements the type @c xs:gMonthDay.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class GMonthDayType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<GMonthDayType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ GMonthDayType();
+ };
+
+ /**
+ * @short Implements the type @c xs:gDay.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class GDayType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<GDayType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ GDayType();
+ };
+
+ /**
+ * @short Implements the type @c xs:gMonth.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class GMonthType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<GMonthType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ GMonthType();
+ };
+
+ /**
+ * @short Implements the type @c xs:boolean.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class BooleanType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<BooleanType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ BooleanType();
+ };
+
+ /**
+ * @short Implements the type @c xs:base64Binary.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class Base64BinaryType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<Base64BinaryType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ Base64BinaryType();
+ };
+
+ /**
+ * @short Implements the type @c xs:hexBinary.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class HexBinaryType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<HexBinaryType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ HexBinaryType();
+ };
+
+ /**
+ * @short Implements the type @c xs:anyURI.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class AnyURIType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<AnyURIType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ AnyURIType();
+ };
+
+ /**
+ * @short Implements the type @c xs:QName.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class QNameType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<QNameType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ QNameType();
+ };
+
+ /**
+ * Represents the xs:string type and all derived types of
+ * xs:string, such as xs:token.
+ *
+ * StringType instances are used for representing all different string
+ * types. The purpose of this is that xs:string sub-types must use the
+ * class, StringType, in order to use the correct behavior in call
+ * dispatch situations. That is, all xs:string sub-types must use the
+ * same AtomicComparator as xs:string itself uses, and that is achieved
+ * this way.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class StringType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<StringType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ protected:
+ friend class BuiltinTypes;
+ StringType(const AtomicType::Ptr &parentType,
+ const AtomicCasterLocator::Ptr &casterLoc);
+ };
+
+ template<TypeOfDerivedString derivedType>
+ class DerivedStringType : public StringType
+ {
+ public:
+ using StringType::accept;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &v,
+ const SourceLocationReflection *const r) const
+ {
+ return v->visit(this, r);
+ }
+
+ virtual QXmlName name(const NamePool::Ptr &np) const
+ {
+ switch(derivedType)
+ {
+ case TypeString: return np->allocateQName(StandardNamespaces::xs, QLatin1String("string"));
+ case TypeNormalizedString: return np->allocateQName(StandardNamespaces::xs, QLatin1String("normalizedString"));
+ case TypeToken: return np->allocateQName(StandardNamespaces::xs, QLatin1String("token"));
+ case TypeLanguage: return np->allocateQName(StandardNamespaces::xs, QLatin1String("language"));
+ case TypeNMTOKEN: return np->allocateQName(StandardNamespaces::xs, QLatin1String("NMTOKEN"));
+ case TypeName: return np->allocateQName(StandardNamespaces::xs, QLatin1String("Name"));
+ case TypeNCName: return np->allocateQName(StandardNamespaces::xs, QLatin1String("NCName"));
+ case TypeID: return np->allocateQName(StandardNamespaces::xs, QLatin1String("ID"));
+ case TypeIDREF: return np->allocateQName(StandardNamespaces::xs, QLatin1String("IDREF"));
+ case TypeENTITY: return np->allocateQName(StandardNamespaces::xs, QLatin1String("ENTITY"));
+ }
+
+ Q_ASSERT_X(false, "DerivedStringType::name()", "Invalid value in instantiation.");
+ return QXmlName();
+ }
+
+ virtual QString displayName(const NamePool::Ptr &np) const
+ {
+ return np->displayName(name(np));
+ }
+
+ protected:
+ friend class BuiltinTypes;
+
+ DerivedStringType(const AtomicType::Ptr &parentType,
+ const AtomicCasterLocator::Ptr &casterLoc) : StringType(parentType, casterLoc)
+ {
+ }
+
+ };
+
+ /**
+ * @short Implements the type @c xs:NOTATION.
+ *
+ * @ingroup Patternist_types
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class NOTATIONType : public BuiltinAtomicType
+ {
+ public:
+ typedef QExplicitlySharedDataPointer<NOTATIONType> Ptr;
+
+ virtual AtomicTypeVisitorResult::Ptr accept(const AtomicTypeVisitor::Ptr &visitor,
+ const SourceLocationReflection *const reflection) const;
+ virtual AtomicTypeVisitorResult::Ptr accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
+ const qint16 op,
+ const SourceLocationReflection *const reflection) const;
+ virtual QXmlName name(const NamePool::Ptr &np) const;
+ virtual QString displayName(const NamePool::Ptr &np) const;
+
+ /**
+ * Overridden to return @c true, xs:NOTATION is abstract.
+ *
+ * @returns always @c true
+ */
+ virtual bool isAbstract() const;
+
+ protected:
+ friend class BuiltinTypes;
+ NOTATIONType();
+ };
+}
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif