Update licenseheader text in source files for qtxmlpatterns Qt module
[profile/ivi/qtxmlpatterns.git] / src / xmlpatterns / type / qatomictypedispatch_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 //
43 //  W A R N I N G
44 //  -------------
45 //
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.
49 //
50 // We mean it.
51
52 #ifndef Patternist_AtomicTypeDispatch_H
53 #define Patternist_AtomicTypeDispatch_H
54
55 #include <QSharedData>
56
57
58 QT_BEGIN_HEADER
59
60 QT_BEGIN_NAMESPACE
61
62 namespace QPatternist
63 {
64     class AnyAtomicType;
65     class AnyURIType;
66     class Base64BinaryType;
67     class BooleanType;
68     class DateTimeType;
69     class DateType;
70     class DayTimeDurationType;
71     class DecimalType;
72     class DoubleType;
73     class DurationType;
74     class FloatType;
75     class GDayType;
76     class GMonthDayType;
77     class GMonthType;
78     class GYearMonthType;
79     class GYearType;
80     class HexBinaryType;
81     class IntegerType;
82     class NOTATIONType;
83     class QNameType;
84     class SourceLocationReflection;
85     class StringType;
86     class SchemaTimeType;
87     class UntypedAtomicType;
88     class YearMonthDurationType;
89
90     enum TypeOfDerivedInteger
91     {
92         TypeByte,
93         TypeInt,
94         TypeLong,
95         TypeNegativeInteger,
96         TypeNonNegativeInteger,
97         TypeNonPositiveInteger,
98         TypePositiveInteger,
99         TypeShort,
100         TypeUnsignedByte,
101         TypeUnsignedInt,
102         TypeUnsignedLong,
103         TypeUnsignedShort
104     };
105
106     template<TypeOfDerivedInteger DerivedType> class DerivedIntegerType;
107
108     enum TypeOfDerivedString
109     {
110         TypeString,
111         TypeNormalizedString,
112         TypeToken,
113         TypeLanguage,
114         TypeNMTOKEN,
115         TypeName,
116         TypeNCName,
117         TypeID,
118         TypeIDREF,
119         TypeENTITY
120     };
121
122     template<TypeOfDerivedString DerivedType> class DerivedStringType;
123
124     /**
125      * @todo Documentation's missing:
126      * - Add link to wikipedia's "multiple dispatch" and "visitor" page.
127      * - Add link to http://www.eptacom.net/pubblicazioni/pub_eng/mdisp.html
128      *
129      * @defgroup Patternist_types_dispatch Atomic Type Dispatching
130      */
131
132     /**
133      * @todo Docs missing
134      *
135      * @ingroup Patternist_types_dispatch
136      * @author Frans Englich <frans.englich@nokia.com>
137      */
138     class AtomicTypeVisitorResult : public QSharedData
139     {
140     public:
141         typedef QExplicitlySharedDataPointer<AtomicTypeVisitorResult> Ptr;
142         AtomicTypeVisitorResult() {}
143         virtual ~AtomicTypeVisitorResult() {}
144     };
145
146     /**
147      * @todo Docs missing
148      *
149      * @see ParameterizedAtomicTypeVisitor
150      * @ingroup Patternist_types_dispatch
151      * @author Frans Englich <frans.englich@nokia.com>
152      */
153     class AtomicTypeVisitor : public QSharedData
154     {
155     public:
156         typedef QExplicitlySharedDataPointer<AtomicTypeVisitor> Ptr;
157         virtual ~AtomicTypeVisitor() {}
158
159         virtual AtomicTypeVisitorResult::Ptr visit(const AnyAtomicType *,
160                                                    const SourceLocationReflection *const reflection) const = 0;
161         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
162                                                    const SourceLocationReflection *const reflection) const = 0;
163         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *,
164                                                    const SourceLocationReflection *const reflection) const = 0;
165         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
166                                                    const SourceLocationReflection *const reflection) const = 0;
167         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
168                                                    const SourceLocationReflection *const reflection) const = 0;
169         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
170                                                    const SourceLocationReflection *const reflection) const = 0;
171         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
172                                                    const SourceLocationReflection *const reflection) const = 0;
173         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
174                                                    const SourceLocationReflection *const reflection) const = 0;
175         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
176                                                    const SourceLocationReflection *const reflection) const = 0;
177         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
178                                                    const SourceLocationReflection *const reflection) const = 0;
179         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
180                                                    const SourceLocationReflection *const reflection) const = 0;
181         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *,
182                                                    const SourceLocationReflection *const reflection) const = 0;
183         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *,
184                                                    const SourceLocationReflection *const reflection) const = 0;
185         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *,
186                                                    const SourceLocationReflection *const reflection) const = 0;
187         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *,
188                                                    const SourceLocationReflection *const reflection) const = 0;
189         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *,
190                                                    const SourceLocationReflection *const reflection) const = 0;
191         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *,
192                                                    const SourceLocationReflection *const reflection) const = 0;
193         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
194                                                    const SourceLocationReflection *const reflection) const = 0;
195         virtual AtomicTypeVisitorResult::Ptr visit(const NOTATIONType *,
196                                                    const SourceLocationReflection *const reflection) const = 0;
197         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *,
198                                                    const SourceLocationReflection *const reflection) const = 0;
199         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
200                                                    const SourceLocationReflection *const reflection) const = 0;
201         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *,
202                                                    const SourceLocationReflection *const reflection) const = 0;
203         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
204                                                    const SourceLocationReflection *const reflection) const = 0;
205         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
206                                                    const SourceLocationReflection *const reflection) const = 0;
207     };
208
209     /**
210      * @todo Docs missing
211      *
212      * @see AtomicTypeVisitor
213      * @ingroup Patternist_types_dispatch
214      * @author Frans Englich <frans.englich@nokia.com>
215      */
216     class ParameterizedAtomicTypeVisitor : public QSharedData
217     {
218     public:
219         typedef QExplicitlySharedDataPointer<ParameterizedAtomicTypeVisitor> Ptr;
220         virtual ~ParameterizedAtomicTypeVisitor() {}
221
222         virtual AtomicTypeVisitorResult::Ptr visit(const AnyAtomicType *, const qint16 param,
223                                                    const SourceLocationReflection *const reflection) const = 0;
224         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *, const qint16 param,
225                                                    const SourceLocationReflection *const reflection) const = 0;
226         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *, const qint16 param,
227                                                    const SourceLocationReflection *const reflection) const = 0;
228         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *, const qint16 param,
229                                                    const SourceLocationReflection *const reflection) const = 0;
230         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *, const qint16 param,
231                                                    const SourceLocationReflection *const reflection) const = 0;
232         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *, const qint16 param,
233                                                    const SourceLocationReflection *const reflection) const = 0;
234         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *, const qint16 param,
235                                                    const SourceLocationReflection *const reflection) const = 0;
236         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *, const qint16 param,
237                                                    const SourceLocationReflection *const reflection) const = 0;
238         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *, const qint16 param,
239                                                    const SourceLocationReflection *const reflection) const = 0;
240         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *, const qint16 param,
241                                                    const SourceLocationReflection *const reflection) const = 0;
242         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *, const qint16 param,
243                                                    const SourceLocationReflection *const reflection) const = 0;
244         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *, const qint16 param,
245                                                    const SourceLocationReflection *const reflection) const = 0;
246         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *, const qint16 param,
247                                                    const SourceLocationReflection *const reflection) const = 0;
248         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *, const qint16 param,
249                                                    const SourceLocationReflection *const reflection) const = 0;
250         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *, const qint16 param,
251                                                    const SourceLocationReflection *const reflection) const = 0;
252         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *, const qint16 param,
253                                                    const SourceLocationReflection *const reflection) const = 0;
254         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *, const qint16 param,
255                                                    const SourceLocationReflection *const reflection) const = 0;
256         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *, const qint16 param,
257                                                    const SourceLocationReflection *const reflection) const = 0;
258         virtual AtomicTypeVisitorResult::Ptr visit(const NOTATIONType *, const qint16 param,
259                                                    const SourceLocationReflection *const reflection) const = 0;
260         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *, const qint16 param,
261                                                    const SourceLocationReflection *const reflection) const = 0;
262         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *, const qint16 param,
263                                                    const SourceLocationReflection *const reflection) const = 0;
264         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *, const qint16 param,
265                                                    const SourceLocationReflection *const reflection) const = 0;
266         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *, const qint16 param,
267                                                    const SourceLocationReflection *const reflection) const = 0;
268         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *, const qint16 param,
269                                                    const SourceLocationReflection *const reflection) const = 0;
270     };
271 }
272
273 QT_END_NAMESPACE
274
275 QT_END_HEADER
276
277 #endif