1 /****************************************************************************
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
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.
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.
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.
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.
40 ****************************************************************************/
46 // This file is not part of the Qt API. It exists purely as an
47 // implementation detail. This header file may change from version to
48 // version without notice, or even be removed.
52 #ifndef Patternist_AtomicType_H
53 #define Patternist_AtomicType_H
55 #include <private/qanysimpletype_p.h>
56 #include <private/qatomiccasterlocator_p.h>
57 #include <private/qatomiccomparatorlocator_p.h>
58 #include <private/qatomicmathematicianlocator_p.h>
59 #include <private/qatomictypedispatch_p.h>
60 #include <private/qitemtype_p.h>
69 class SourceLocationReflection;
72 * @short Base class for all classes that implements atomic types.
74 * AtomicType does not implement @c xs:anyAtomicType, it is the C++
75 * base class for classes that implement atomic types, such as @c xs:anyAtomicType.
77 * @ingroup Patternist_types
78 * @author Frans Englich <frans.englich@nokia.com>
80 class AtomicType : public ItemType,
85 typedef QExplicitlySharedDataPointer<AtomicType> Ptr;
87 virtual ~AtomicType();
90 * Implements a generic algorithm which relies on wxsTypeMatches().
92 * @returns @c true depending on if @p item is an atomic type, and that
93 * AtomicValue::itemType()'s SequenceType::itemType() matches this type.
95 virtual bool itemMatches(const Item &item) const;
98 * @returns the result of SharedQXmlName::displayName(), of the SharedQName
99 * object returned from the name() function.
101 virtual QString displayName(const NamePool::Ptr &np) const;
104 * returns always @c false
106 virtual bool isNodeType() const;
109 * returns always @c true
111 virtual bool isAtomicType() const;
114 * Determines whether @p other is equal to this type, or is a
115 * sub-type of this type.
117 * The implementation is generic, relying on operator==()
118 * and xdtSuperType().
120 virtual bool xdtTypeMatches(const ItemType::Ptr &other) const;
123 * @returns always 'this'
125 virtual ItemType::Ptr atomizedType() const;
128 * @returns always SchemaType::SimpleTypeAtomic
130 virtual TypeCategory category() const;
133 * @returns DerivationRestriction
135 virtual DerivationMethod derivationMethod() const;
137 virtual AtomicTypeVisitorResult::Ptr
138 accept(const QExplicitlySharedDataPointer<AtomicTypeVisitor> &visitor,
139 const SourceLocationReflection *const) const = 0;
141 virtual AtomicTypeVisitorResult::Ptr
142 accept(const ParameterizedAtomicTypeVisitor::Ptr &visitor,
144 const SourceLocationReflection *const) const = 0;
146 virtual AtomicComparatorLocator::Ptr comparatorLocator() const = 0;
147 virtual AtomicMathematicianLocator::Ptr mathematicianLocator() const = 0;
148 virtual AtomicCasterLocator::Ptr casterLocator() const = 0;