efeca8dce816a582154775cc5cb168cecc4e266f
[profile/ivi/qtxmlpatterns.git] / src / xmlpatterns / data / qdecimal_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_Decimal_H
53 #define Patternist_Decimal_H
54
55 #include <private/qschemanumeric_p.h>
56
57 QT_BEGIN_HEADER
58
59 QT_BEGIN_NAMESPACE
60
61 /**
62  * Defined in QtCore's qlocale.cpp.
63  */
64 Q_CORE_EXPORT char *qdtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp);
65
66 namespace QPatternist
67 {
68
69     /**
70      * @short Implements the value instance of the @c xs:decimal type.
71      *
72      * @author Frans Englich <frans.englich@nokia.com>
73      * @ingroup Patternist_xdm
74      * @todo Documentation is missing/incomplete
75      */
76     class Decimal : public Numeric
77     {
78     public:
79
80         static Decimal::Ptr fromValue(const xsDecimal num);
81
82         /**
83          * Creates a Decimal from the lexical representation of @c xs:decimal stored in
84          * @p strNumeric.
85          *
86          * A possible optimization is to create an Integer if the string ends
87          * with ".0". But this is not conformant. For example, the user writes N.0
88          * which according to the specification is an xs:decimal, but where the
89          * expression is, is an xs:integer is required. That would pass with
90          * such an optimization.
91          */
92         static AtomicValue::Ptr fromLexical(const QString &strNumeric);
93
94         /**
95          * Gets the Effective %Boolean Value of this number.
96          *
97          * @returns @c false if the number is 0 or @c NaN, otherwise @c true.
98          */
99         bool evaluateEBV(const QExplicitlySharedDataPointer<DynamicContext> &) const;
100
101         virtual QString stringValue() const;
102
103         /**
104          * @returns always BuiltinTypes::xsDecimal
105          */
106         virtual ItemType::Ptr type() const;
107
108         virtual xsDouble toDouble() const;
109         virtual xsInteger toInteger() const;
110         virtual xsFloat toFloat() const;
111         virtual xsDecimal toDecimal() const;
112         virtual qulonglong toUnsignedInteger() const;
113
114         virtual Numeric::Ptr round() const;
115         virtual Numeric::Ptr roundHalfToEven(const xsInteger scale) const;
116         virtual Numeric::Ptr floor() const;
117         virtual Numeric::Ptr ceiling() const;
118         virtual Numeric::Ptr abs() const;
119
120         /**
121          * @returns always @c false, xs:decimal doesn't have
122          * not-a-number in its value space.
123          */
124         virtual bool isNaN() const;
125
126         /**
127          * @returns always @c false, xs:decimal doesn't have
128          * infinity in its value space.
129          */
130         virtual bool isInf() const;
131
132         virtual Item toNegated() const;
133
134         /**
135          * Converts @p value into a canonical string representation for @c xs:decimal. This
136          * function is used internally by various classes. Users probably wants to call
137          * stringValue() which in turn calls this function.
138          */
139         static QString toString(const xsDecimal value);
140
141         virtual bool isSigned() const;
142
143     protected:
144
145         Decimal(const xsDecimal num);
146
147     private:
148         const xsDecimal m_value;
149     };
150 }
151
152 QT_END_NAMESPACE
153
154 QT_END_HEADER
155
156 #endif