ef9441290f975d1d48740ff7a61c1e63ca1ca519
[profile/ivi/qtxmlpatterns.git] / src / xmlpatterns / type / qatomiccasterlocators_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
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_AtomicCasterLocators_H
53 #define Patternist_AtomicCasterLocators_H
54
55 #include <private/qatomiccasterlocator_p.h>
56 #include <private/qatomiccasters_p.h>
57 //#include <private/qderivedinteger_p.h>
58
59 /**
60  * @file
61  * @short Contains AtomicCasterLocator sub-classes that finds classes
62  * which can perform casting from one atomic value to another.
63  */
64
65 QT_BEGIN_HEADER
66
67 QT_BEGIN_NAMESPACE
68
69 namespace QPatternist
70 {
71     /**
72      * @author Frans Englich <frans.englich@nokia.com>
73      */
74     class ToStringCasterLocator : public AtomicCasterLocator
75     {
76     public:
77         using AtomicCasterLocator::visit;
78         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
79                                                    const SourceLocationReflection *const r) const;
80         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *,
81                                                    const SourceLocationReflection *const r) const;
82         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
83                                                    const SourceLocationReflection *const r) const;
84         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
85                                                    const SourceLocationReflection *const r) const;
86         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
87                                                    const SourceLocationReflection *const r) const;
88         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
89                                                    const SourceLocationReflection *const r) const;
90         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
91                                                    const SourceLocationReflection *const r) const;
92         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
93                                                    const SourceLocationReflection *const r) const;
94         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
95                                                    const SourceLocationReflection *const r) const;
96         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
97                                                    const SourceLocationReflection *const r) const;
98         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *,
99                                                    const SourceLocationReflection *const r) const;
100         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *,
101                                                    const SourceLocationReflection *const r) const;
102         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *,
103                                                    const SourceLocationReflection *const r) const;
104         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *,
105                                                    const SourceLocationReflection *const r) const;
106         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *,
107                                                    const SourceLocationReflection *const r) const;
108         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *,
109                                                    const SourceLocationReflection *const r) const;
110         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
111                                                    const SourceLocationReflection *const r) const;
112         virtual AtomicTypeVisitorResult::Ptr visit(const NOTATIONType *,
113                                                    const SourceLocationReflection *const r) const;
114         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *,
115                                                    const SourceLocationReflection *const r) const;
116         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
117                                                    const SourceLocationReflection *const r) const;
118         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *,
119                                                    const SourceLocationReflection *const r) const;
120         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
121                                                    const SourceLocationReflection *const r) const;
122         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
123                                                    const SourceLocationReflection *const r) const;
124     };
125
126     /**
127      * @author Frans Englich <frans.englich@nokia.com>
128      */
129     class ToUntypedAtomicCasterLocator : public AtomicCasterLocator
130     {
131     public:
132         using AtomicCasterLocator::visit;
133         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
134                                                    const SourceLocationReflection *const r) const;
135         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *,
136                                                    const SourceLocationReflection *const r) const;
137         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
138                                                    const SourceLocationReflection *const r) const;
139         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
140                                                    const SourceLocationReflection *const r) const;
141         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
142                                                    const SourceLocationReflection *const r) const;
143         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
144                                                    const SourceLocationReflection *const r) const;
145         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
146                                                    const SourceLocationReflection *const r) const;
147         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
148                                                    const SourceLocationReflection *const r) const;
149         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
150                                                    const SourceLocationReflection *const r) const;
151         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
152                                                    const SourceLocationReflection *const r) const;
153         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *,
154                                                    const SourceLocationReflection *const r) const;
155         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *,
156                                                    const SourceLocationReflection *const r) const;
157         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *,
158                                                    const SourceLocationReflection *const r) const;
159         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *,
160                                                    const SourceLocationReflection *const r) const;
161         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *,
162                                                    const SourceLocationReflection *const r) const;
163         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *,
164                                                    const SourceLocationReflection *const r) const;
165         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
166                                                    const SourceLocationReflection *const r) const;
167         virtual AtomicTypeVisitorResult::Ptr visit(const NOTATIONType *,
168                                                    const SourceLocationReflection *const r) const;
169         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *,
170                                                    const SourceLocationReflection *const r) const;
171         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
172                                                    const SourceLocationReflection *const r) const;
173         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *,
174                                                    const SourceLocationReflection *const r) const;
175         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
176                                                    const SourceLocationReflection *const r) const;
177         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
178                                                    const SourceLocationReflection *const r) const;
179     };
180
181     /**
182      * @author Frans Englich <frans.englich@nokia.com>
183      */
184     class ToAnyURICasterLocator : public AtomicCasterLocator
185     {
186     public:
187         using AtomicCasterLocator::visit;
188         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
189                                                    const SourceLocationReflection *const r) const;
190         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
191                                                    const SourceLocationReflection *const r) const;
192         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
193                                                    const SourceLocationReflection *const r) const;
194     };
195
196     /**
197      * @author Frans Englich <frans.englich@nokia.com>
198      */
199     class ToBooleanCasterLocator : public AtomicCasterLocator
200     {
201     public:
202         using AtomicCasterLocator::visit;
203         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
204                                                    const SourceLocationReflection *const r) const;
205         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
206                                                    const SourceLocationReflection *const r) const;
207         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
208                                                    const SourceLocationReflection *const r) const;
209         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
210                                                    const SourceLocationReflection *const r) const;
211         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
212                                                    const SourceLocationReflection *const r) const;
213         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
214                                                    const SourceLocationReflection *const r) const;
215         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
216                                                    const SourceLocationReflection *const r) const;
217     };
218
219     /**
220      * @author Frans Englich <frans.englich@nokia.com>
221      */
222     class ToDoubleCasterLocator : public AtomicCasterLocator
223     {
224     public:
225         using AtomicCasterLocator::visit;
226         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
227                                                    const SourceLocationReflection *const r) const;
228         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
229                                                    const SourceLocationReflection *const r) const;
230         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
231                                                    const SourceLocationReflection *const r) const;
232         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
233                                                    const SourceLocationReflection *const r) const;
234         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
235                                                    const SourceLocationReflection *const r) const;
236         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
237                                                    const SourceLocationReflection *const r) const;
238         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
239                                                    const SourceLocationReflection *const r) const;
240     };
241
242     /**
243      * @author Frans Englich <frans.englich@nokia.com>
244      */
245     class ToFloatCasterLocator : public AtomicCasterLocator
246     {
247     public:
248         using AtomicCasterLocator::visit;
249         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
250                                                    const SourceLocationReflection *const r) const;
251         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
252                                                    const SourceLocationReflection *const r) const;
253         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
254                                                    const SourceLocationReflection *const r) const;
255         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
256                                                    const SourceLocationReflection *const r) const;
257         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
258                                                    const SourceLocationReflection *const r) const;
259         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
260                                                    const SourceLocationReflection *const r) const;
261         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
262                                                    const SourceLocationReflection *const r) const;
263     };
264
265     /**
266      * @author Frans Englich <frans.englich@nokia.com>
267      */
268     class ToDecimalCasterLocator : public AtomicCasterLocator
269     {
270     public:
271         using AtomicCasterLocator::visit;
272         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
273                                                    const SourceLocationReflection *const r) const;
274         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
275                                                    const SourceLocationReflection *const r) const;
276         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
277                                                    const SourceLocationReflection *const r) const;
278         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
279                                                    const SourceLocationReflection *const r) const;
280         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
281                                                    const SourceLocationReflection *const r) const;
282         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
283                                                    const SourceLocationReflection *const r) const;
284         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
285                                                    const SourceLocationReflection *const r) const;
286     };
287
288     /**
289      * @author Frans Englich <frans.englich@nokia.com>
290      */
291     class ToIntegerCasterLocator : public AtomicCasterLocator
292     {
293     public:
294         using AtomicCasterLocator::visit;
295         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
296                                                    const SourceLocationReflection *const r) const;
297         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
298                                                    const SourceLocationReflection *const r) const;
299         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
300                                                    const SourceLocationReflection *const r) const;
301         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
302                                                    const SourceLocationReflection *const r) const;
303         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
304                                                    const SourceLocationReflection *const r) const;
305         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
306                                                    const SourceLocationReflection *const r) const;
307         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
308                                                    const SourceLocationReflection *const r) const;
309     };
310
311     /**
312      * @author Frans Englich <frans.englich@nokia.com>
313      */
314     class ToBase64BinaryCasterLocator : public AtomicCasterLocator
315     {
316     public:
317         using AtomicCasterLocator::visit;
318         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *,
319                                                    const SourceLocationReflection *const r) const;
320         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *,
321                                                    const SourceLocationReflection *const r) const;
322         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
323                                                    const SourceLocationReflection *const r) const;
324         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
325                                                    const SourceLocationReflection *const r) const;
326     };
327
328     /**
329      * @author Frans Englich <frans.englich@nokia.com>
330      */
331     class ToHexBinaryCasterLocator : public AtomicCasterLocator
332     {
333     public:
334         using AtomicCasterLocator::visit;
335         virtual AtomicTypeVisitorResult::Ptr visit(const Base64BinaryType *,
336                                                    const SourceLocationReflection *const r) const;
337         virtual AtomicTypeVisitorResult::Ptr visit(const HexBinaryType *,
338                                                    const SourceLocationReflection *const r) const;
339         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
340                                                    const SourceLocationReflection *const r) const;
341         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
342                                                    const SourceLocationReflection *const r) const;
343     };
344
345     /**
346      * @author Frans Englich <frans.englich@nokia.com>
347      */
348     class ToQNameCasterLocator : public AtomicCasterLocator
349     {
350     public:
351         using AtomicCasterLocator::visit;
352         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *,
353                                                    const SourceLocationReflection *const r) const;
354         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
355                                                    const SourceLocationReflection *const r) const;
356     };
357
358     /**
359      * @author Frans Englich <frans.englich@nokia.com>
360      */
361     class ToGYearCasterLocator : public AtomicCasterLocator
362     {
363     public:
364         using AtomicCasterLocator::visit;
365         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
366                                                    const SourceLocationReflection *const r) const;
367         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
368                                                    const SourceLocationReflection *const r) const;
369         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *,
370                                                    const SourceLocationReflection *const r) const;
371         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
372                                                    const SourceLocationReflection *const r) const;
373         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
374                                                    const SourceLocationReflection *const r) const;
375     };
376
377     /**
378      * @author Frans Englich <frans.englich@nokia.com>
379      */
380     class ToGDayCasterLocator : public AtomicCasterLocator
381     {
382     public:
383         using AtomicCasterLocator::visit;
384         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
385                                                    const SourceLocationReflection *const r) const;
386         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
387                                                    const SourceLocationReflection *const r) const;
388         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *,
389                                                    const SourceLocationReflection *const r) const;
390         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
391                                                    const SourceLocationReflection *const r) const;
392         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
393                                                    const SourceLocationReflection *const r) const;
394     };
395
396     /**
397      * @author Frans Englich <frans.englich@nokia.com>
398      */
399     class ToGMonthCasterLocator : public AtomicCasterLocator
400     {
401     public:
402         using AtomicCasterLocator::visit;
403         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
404                                                    const SourceLocationReflection *const r) const;
405         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
406                                                    const SourceLocationReflection *const r) const;
407         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *,
408                                                    const SourceLocationReflection *const r) const;
409         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
410                                                    const SourceLocationReflection *const r) const;
411         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
412                                                    const SourceLocationReflection *const r) const;
413     };
414
415     /**
416      * @author Frans Englich <frans.englich@nokia.com>
417      */
418     class ToGYearMonthCasterLocator : public AtomicCasterLocator
419     {
420     public:
421         using AtomicCasterLocator::visit;
422         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
423                                                    const SourceLocationReflection *const r) const;
424         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
425                                                    const SourceLocationReflection *const r) const;
426         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *,
427                                                    const SourceLocationReflection *const r) const;
428         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
429                                                    const SourceLocationReflection *const r) const;
430         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
431                                                    const SourceLocationReflection *const r) const;
432     };
433
434     /**
435      * @author Frans Englich <frans.englich@nokia.com>
436      */
437     class ToGMonthDayCasterLocator : public AtomicCasterLocator
438     {
439     public:
440         using AtomicCasterLocator::visit;
441         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
442                                                    const SourceLocationReflection *const r) const;
443         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
444                                                    const SourceLocationReflection *const r) const;
445         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *,
446                                                    const SourceLocationReflection *const r) const;
447         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
448                                                    const SourceLocationReflection *const r) const;
449         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
450                                                    const SourceLocationReflection *const r) const;
451     };
452
453     /**
454      * @author Frans Englich <frans.englich@nokia.com>
455      */
456     class ToDateTimeCasterLocator : public AtomicCasterLocator
457     {
458     public:
459         using AtomicCasterLocator::visit;
460         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
461                                                    const SourceLocationReflection *const r) const;
462         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
463                                                    const SourceLocationReflection *const r) const;
464         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
465                                                    const SourceLocationReflection *const r) const;
466         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
467                                                    const SourceLocationReflection *const r) const;
468     };
469
470     /**
471      * @author Frans Englich <frans.englich@nokia.com>
472      */
473     class ToDateCasterLocator : public AtomicCasterLocator
474     {
475     public:
476         using AtomicCasterLocator::visit;
477         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
478                                                    const SourceLocationReflection *const r) const;
479         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
480                                                    const SourceLocationReflection *const r) const;
481         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
482                                                    const SourceLocationReflection *const r) const;
483         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
484                                                    const SourceLocationReflection *const r) const;
485     };
486
487     /**
488      * @author Frans Englich <frans.englich@nokia.com>
489      */
490     class ToSchemaTimeCasterLocator : public AtomicCasterLocator
491     {
492     public:
493         using AtomicCasterLocator::visit;
494         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
495                                                    const SourceLocationReflection *const r) const;
496         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *,
497                                                    const SourceLocationReflection *const r) const;
498         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
499                                                    const SourceLocationReflection *const r) const;
500         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
501                                                    const SourceLocationReflection *const r) const;
502     };
503
504     /**
505      * @author Frans Englich <frans.englich@nokia.com>
506      */
507     class ToDurationCasterLocator : public AtomicCasterLocator
508     {
509     public:
510         using AtomicCasterLocator::visit;
511         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
512                                                    const SourceLocationReflection *const r) const;
513         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
514                                                    const SourceLocationReflection *const r) const;
515         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
516                                                    const SourceLocationReflection *const r) const;
517         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
518                                                    const SourceLocationReflection *const r) const;
519         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
520                                                    const SourceLocationReflection *const r) const;
521     };
522
523     /**
524      * @author Frans Englich <frans.englich@nokia.com>
525      */
526     class ToDayTimeDurationCasterLocator : public AtomicCasterLocator
527     {
528     public:
529         using AtomicCasterLocator::visit;
530         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
531                                                    const SourceLocationReflection *const r) const;
532         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
533                                                    const SourceLocationReflection *const r) const;
534         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
535                                                    const SourceLocationReflection *const r) const;
536         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
537                                                    const SourceLocationReflection *const r) const;
538         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
539                                                    const SourceLocationReflection *const r) const;
540     };
541
542     /**
543      * @author Frans Englich <frans.englich@nokia.com>
544      */
545     class ToYearMonthDurationCasterLocator : public AtomicCasterLocator
546     {
547     public:
548         using AtomicCasterLocator::visit;
549         virtual AtomicTypeVisitorResult::Ptr visit(const DayTimeDurationType *,
550                                                    const SourceLocationReflection *const r) const;
551         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
552                                                    const SourceLocationReflection *const r) const;
553         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
554                                                    const SourceLocationReflection *const r) const;
555         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
556                                                    const SourceLocationReflection *const r) const;
557         virtual AtomicTypeVisitorResult::Ptr visit(const YearMonthDurationType *,
558                                                    const SourceLocationReflection *const r) const;
559     };
560
561     /**
562      * @author Frans Englich <frans.englich@nokia.com>
563      */
564     template<TypeOfDerivedInteger type>
565     class ToDerivedIntegerCasterLocator : public ToIntegerCasterLocator
566     {
567     public:
568         using ToIntegerCasterLocator::visit;
569
570         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
571                                                    const SourceLocationReflection *const r) const
572         {
573             Q_UNUSED(r);
574             return AtomicTypeVisitorResult::Ptr(new BooleanToDerivedIntegerCaster<type>());
575         }
576
577         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
578                                                    const SourceLocationReflection *const r) const
579         {
580             Q_UNUSED(r);
581             return AtomicTypeVisitorResult::Ptr(new StringToDerivedIntegerCaster<type>());
582         }
583
584         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
585                                                    const SourceLocationReflection *const r) const
586         {
587             Q_UNUSED(r);
588             return AtomicTypeVisitorResult::Ptr(new StringToDerivedIntegerCaster<type>());
589         }
590
591         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
592                                                    const SourceLocationReflection *const r) const
593         {
594             Q_UNUSED(r);
595             return AtomicTypeVisitorResult::Ptr(new StringToDerivedIntegerCaster<type>());
596         }
597
598         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
599                                                    const SourceLocationReflection *const r) const
600         {
601             Q_UNUSED(r);
602             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
603         }
604
605         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeByte> *,
606                                                    const SourceLocationReflection *const r) const
607         {
608             Q_UNUSED(r);
609             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
610         }
611
612         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeInt> *,
613                                                    const SourceLocationReflection *const r) const
614         {
615             Q_UNUSED(r);
616             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
617         }
618
619         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeLong> *,
620                                                    const SourceLocationReflection *const r) const
621         {
622             Q_UNUSED(r);
623             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
624         }
625
626         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeNegativeInteger> *,
627                                                    const SourceLocationReflection *const r) const
628         {
629             Q_UNUSED(r);
630             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
631         }
632
633         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeNonNegativeInteger> *,
634                                                    const SourceLocationReflection *const r) const
635         {
636             Q_UNUSED(r);
637             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
638         }
639
640         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeNonPositiveInteger> *,
641                                                    const SourceLocationReflection *const r) const
642         {
643             Q_UNUSED(r);
644             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
645         }
646
647         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypePositiveInteger> *,
648                                                    const SourceLocationReflection *const r) const
649         {
650             Q_UNUSED(r);
651             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
652         }
653
654         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeShort> *,
655                                                    const SourceLocationReflection *const r) const
656         {
657             Q_UNUSED(r);
658             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
659         }
660
661         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeUnsignedByte> *,
662                                                    const SourceLocationReflection *const r) const
663         {
664             Q_UNUSED(r);
665             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
666         }
667
668         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeUnsignedInt> *,
669                                                    const SourceLocationReflection *const r) const
670         {
671             Q_UNUSED(r);
672             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
673         }
674
675         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeUnsignedLong> *,
676                                                    const SourceLocationReflection *const r) const
677         {
678             Q_UNUSED(r);
679             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
680         }
681
682         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedIntegerType<TypeUnsignedShort> *,
683                                                    const SourceLocationReflection *const r) const
684         {
685             Q_UNUSED(r);
686             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
687         }
688
689         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
690                                                    const SourceLocationReflection *const r) const
691         {
692             Q_UNUSED(r);
693             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
694         }
695
696         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
697                                                    const SourceLocationReflection *const r) const
698         {
699             Q_UNUSED(r);
700             return AtomicTypeVisitorResult::Ptr(new NumericToDerivedIntegerCaster<type>());
701         }
702     };
703
704     /**
705      * @author Frans Englich <frans.englich@nokia.com>
706      */
707     template<TypeOfDerivedString type>
708     class ToDerivedStringCasterLocator : public ToStringCasterLocator
709     {
710     public:
711         using ToStringCasterLocator::visit;
712
713         virtual AtomicTypeVisitorResult::Ptr visit(const BooleanType *,
714                                                    const SourceLocationReflection *const r) const
715         {
716             Q_UNUSED(r);
717             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
718         }
719
720         virtual AtomicTypeVisitorResult::Ptr visit(const StringType *,
721                                                    const SourceLocationReflection *const r) const
722         {
723             Q_UNUSED(r);
724             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
725         }
726
727         virtual AtomicTypeVisitorResult::Ptr visit(const AnyURIType *,
728                                                    const SourceLocationReflection *const r) const
729         {
730             Q_UNUSED(r);
731             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
732         }
733
734         virtual AtomicTypeVisitorResult::Ptr visit(const UntypedAtomicType *,
735                                                    const SourceLocationReflection *const r) const
736         {
737             Q_UNUSED(r);
738             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
739         }
740
741         // TODO TypeString not handled
742         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeNormalizedString> *,
743                                                    const SourceLocationReflection *const r) const
744         {
745             Q_UNUSED(r);
746             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
747         }
748
749         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeToken> *,
750                                                    const SourceLocationReflection *const r) const
751         {
752             Q_UNUSED(r);
753             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
754         }
755
756         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeLanguage> *,
757                                                    const SourceLocationReflection *const r) const
758         {
759             Q_UNUSED(r);
760             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
761         }
762
763         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeNMTOKEN> *,
764                                                    const SourceLocationReflection *const r) const
765         {
766             Q_UNUSED(r);
767             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
768         }
769
770         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeName> *,
771                                                    const SourceLocationReflection *const r) const
772         {
773             Q_UNUSED(r);
774             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
775         }
776
777         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeNCName> *,
778                                                    const SourceLocationReflection *const r) const
779         {
780             Q_UNUSED(r);
781             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
782         }
783
784         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeID> *,
785                                                    const SourceLocationReflection *const r) const
786         {
787             Q_UNUSED(r);
788             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
789         }
790
791         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeIDREF> *,
792                                                    const SourceLocationReflection *const r) const
793         {
794             Q_UNUSED(r);
795             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
796         }
797
798         virtual AtomicTypeVisitorResult::Ptr visit(const DerivedStringType<TypeENTITY> *,
799                                                    const SourceLocationReflection *const r) const
800         {
801             Q_UNUSED(r);
802             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
803         }
804
805         virtual AtomicTypeVisitorResult::Ptr visit(const DateTimeType *,
806                                                    const SourceLocationReflection *const r) const
807         {
808             Q_UNUSED(r);
809             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
810         }
811
812         virtual AtomicTypeVisitorResult::Ptr visit(const DateType *,
813                                                    const SourceLocationReflection *const r) const
814         {
815             Q_UNUSED(r);
816             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
817         }
818
819         virtual AtomicTypeVisitorResult::Ptr visit(const SchemaTimeType *,
820                                                    const SourceLocationReflection *const r) const
821         {
822             Q_UNUSED(r);
823             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
824         }
825
826         virtual AtomicTypeVisitorResult::Ptr visit(const FloatType *,
827                                                    const SourceLocationReflection *const r) const
828         {
829             Q_UNUSED(r);
830             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
831         }
832
833         virtual AtomicTypeVisitorResult::Ptr visit(const DoubleType *,
834                                                    const SourceLocationReflection *const r) const
835         {
836             Q_UNUSED(r);
837             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
838         }
839
840         virtual AtomicTypeVisitorResult::Ptr visit(const DecimalType *,
841                                                    const SourceLocationReflection *const r) const
842         {
843             Q_UNUSED(r);
844             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
845         }
846
847         virtual AtomicTypeVisitorResult::Ptr visit(const IntegerType *,
848                                                    const SourceLocationReflection *const r) const
849         {
850             Q_UNUSED(r);
851             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
852         }
853
854         virtual AtomicTypeVisitorResult::Ptr visit(const DurationType *,
855                                                    const SourceLocationReflection *const r) const
856         {
857             Q_UNUSED(r);
858             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
859         }
860
861         virtual AtomicTypeVisitorResult::Ptr visit(const GYearMonthType *,
862                                                    const SourceLocationReflection *const r) const
863         {
864             Q_UNUSED(r);
865             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
866         }
867
868         virtual AtomicTypeVisitorResult::Ptr visit(const GYearType *,
869                                                    const SourceLocationReflection *const r) const
870         {
871             Q_UNUSED(r);
872             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
873         }
874
875         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthDayType *,
876                                                    const SourceLocationReflection *const r) const
877         {
878             Q_UNUSED(r);
879             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
880         }
881
882         virtual AtomicTypeVisitorResult::Ptr visit(const GDayType *,
883                                                    const SourceLocationReflection *const r) const
884         {
885             Q_UNUSED(r);
886             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
887         }
888
889         virtual AtomicTypeVisitorResult::Ptr visit(const GMonthType *,
890                                                    const SourceLocationReflection *const r) const
891         {
892             Q_UNUSED(r);
893             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
894         }
895
896         virtual AtomicTypeVisitorResult::Ptr visit(const QNameType *,
897                                                    const SourceLocationReflection *const r) const
898         {
899             Q_UNUSED(r);
900             return AtomicTypeVisitorResult::Ptr(new AnyToDerivedStringCaster<type>());
901         }
902     };
903 }
904
905 QT_END_NAMESPACE
906
907 QT_END_HEADER
908
909 #endif