Update licenseheader text in source files for qtxmlpatterns Qt module
[profile/ivi/qtxmlpatterns.git] / src / xmlpatterns / expr / qtemplatepattern_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_TemplatePattern_H
53 #define Patternist_TemplatePattern_H
54
55 #include "qtemplate_p.h"
56
57 QT_BEGIN_HEADER
58 QT_BEGIN_NAMESPACE
59
60 namespace QPatternist
61 {
62     /**
63      * @short Houses the data necessary for a template pattern.
64      *
65      * A template pattern is the match pattern, but have had each operand to @c
66      * | separated out into a separate TemplatePattern. For instance, the
67      * pattern <tt>a | b | c</tt>, becomes three separate TemplatePattern
68      * instances.
69      *
70      * @see TemplateMode
71      * @see Template
72      * @author Frans Englich <frans.englich@nokia.com>
73      * @ingroup Patternist_expressions
74      * @since 4.5
75      */
76     class TemplatePattern : public QSharedData
77     {
78     public:
79         typedef QExplicitlySharedDataPointer<TemplatePattern> Ptr;
80         typedef QVector<Ptr> Vector;
81         typedef int ID;
82
83         inline TemplatePattern(const Expression::Ptr &matchPattern,
84                                const PatternPriority pri,
85                                const ID id,
86                                const Template::Ptr templ);
87
88         inline PatternPriority priority() const;
89         inline const Expression::Ptr &matchPattern() const;
90         inline void setMatchPattern(const Expression::Ptr &pattern);
91         inline const Template::Ptr &templateTarget() const;
92         inline ID id() const;
93
94         /**
95          * This ID is used to ensure that, as 6.4 Conflict Resolution for
96          * Template Rules reads:
97          *
98          * "If the pattern contains multiple alternatives separated by |, then
99          * the template rule is treated equivalently to a set of template
100          * rules, one for each alternative. However, it is not an error if a
101          * node matches more than one of the alternatives."
102          *
103          * For patterns separated by @c |, we have one Template instance for
104          * each alternative, but they all have the same ID, hence if several
105          * alternatives match, we don't flag it as an error if they have the
106          * same ID.
107          */
108     private:
109         Expression::Ptr m_matchPattern;
110         PatternPriority m_priority;
111         ID              m_id;
112         Template::Ptr   m_templateTarget;
113         Q_DISABLE_COPY(TemplatePattern)
114     };
115
116     TemplatePattern::TemplatePattern(const Expression::Ptr &matchPattern,
117                                      const PatternPriority pri,
118                                      const ID id,
119                                      const Template::Ptr templ) : m_matchPattern(matchPattern)
120                                                                 , m_priority(pri)
121                                                                 , m_id(id)
122                                                                 , m_templateTarget(templ)
123
124     {
125         Q_ASSERT(m_matchPattern);
126         Q_ASSERT(m_templateTarget);
127     }
128
129     const Expression::Ptr &TemplatePattern::matchPattern() const
130     {
131         return m_matchPattern;
132     }
133
134     void TemplatePattern::setMatchPattern(const Expression::Ptr &pattern)
135     {
136         m_matchPattern = pattern;
137     }
138
139     PatternPriority TemplatePattern::priority() const
140     {
141         return m_priority;
142     }
143
144     TemplatePattern::ID TemplatePattern::id() const
145     {
146         return m_id;
147     }
148
149     const Template::Ptr &TemplatePattern::templateTarget() const
150     {
151         return m_templateTarget;
152     }
153
154 }
155
156 QT_END_NAMESPACE
157
158 QT_END_HEADER
159
160 #endif
161