1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the  "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 #if !defined(XALANNUMBERFORMAT_HEADER_GUARD_1357924680)
19 #define XALANNUMBERFORMAT_HEADER_GUARD_1357924680
20 
21 
22 
23 // Base include file.  Must be first.
24 #include <xalanc/PlatformSupport/PlatformSupportDefinitions.hpp>
25 
26 
27 
28 #include <xalanc/XalanDOM/XalanDOMString.hpp>
29 
30 
31 
32 namespace XALAN_CPP_NAMESPACE {
33 
34 
35 
36 class XALAN_PLATFORMSUPPORT_EXPORT XalanNumberFormat
37 {
38 public:
39 
40     explicit
41     XalanNumberFormat(MemoryManager&      theManager);
42 
43     static XalanNumberFormat*
create(MemoryManager & theManager)44     create(MemoryManager&      theManager)
45     {
46         XalanNumberFormat*  theInstance;
47 
48         return XalanConstruct(
49                     theManager,
50                     theInstance,
51                     theManager);
52     }
53 
54     virtual
55     ~XalanNumberFormat();
56 
57     MemoryManager&
getMemoryManager()58     getMemoryManager()
59     {
60         return m_groupingSeparator.getMemoryManager();
61     }
62 
63     /**
64      * Format a number into a string.
65      *
66      * @param theValue number to format
67      * @return string representation of number
68      */
69     virtual XalanDOMString&
70     format(double   theValue,
71             XalanDOMString&     theResult);
72 
73 
74 
75     /**
76      * Format a number into a string.
77      *
78      * @param theValue number to format
79      * @return string representation of number
80      */
81     virtual XalanDOMString&
82     format( XMLInt16            theValue,
83             XalanDOMString&     theResult);
84 
85 
86 
87     /**
88      * Format a number into a string.
89      *
90      * @param theValue number to format
91      * @param theResult the string result
92      */
93     virtual XalanDOMString&
94     format(
95             XMLUInt16           theValue,
96             XalanDOMString&     theResult);
97 
98     /**
99      * Format a number into a string.
100      *
101      * @param theValue number to format
102      * @return string representation of number
103      */
104     virtual XalanDOMString&
105     format( XMLInt32            theValue,
106             XalanDOMString&     theResult);
107 
108 
109     /**
110      * Format a number into a string.
111      *
112      * @param theValue number to format
113      * @param theResult the string result
114      */
115     virtual XalanDOMString&
116     format(
117             XMLUInt32           theValue,
118             XalanDOMString&     theResult);
119 
120     /**
121      * Format a number into a string.
122      *
123      * @param theValue number to format
124      * @param theResult the string result
125      */
126     virtual XalanDOMString&
127     format(
128             XMLInt64            theValue,
129             XalanDOMString&     theResult);
130 
131     /**
132      * Format a number into a string.
133      *
134      * @param theValue number to format
135      * @param theResult the string result
136      */
137     virtual XalanDOMString&
138     format(
139             XMLUInt64           theValue,
140             XalanDOMString&     theResult);
141 
142     /**
143      * Whether groupings are used for numbers, for example, "234,678"
144      *
145      * @return true if grouping used
146      */
147     virtual bool
148     isGroupingUsed() const;
149 
150     /**
151      * Change whether groupings are used for numbers, for example, "234,678"
152      *
153      * @param bUsed true to use grouping
154      */
155     virtual void
156     setGroupingUsed(bool bUsed);
157 
158     /**
159      * Change the size of groupings, for example, "234,678" uses a size of "3"
160      *
161      * @param size the grouping size
162      */
163     virtual void
164     setGroupingSize(unsigned long   size);
165 
166     /**
167      * Change the separator string used for groupings, for example, "234,678"
168      * uses the separator ","
169      *
170      * @param s grouping separator string
171      */
172     virtual void
173     setGroupingSeparator(const XalanDOMString&  s);
174 
175 protected:
176 
177     void
178     applyGrouping(
179             const XalanDOMString&       value,
180             XalanDOMString&             result);
181 
182 private:
183 
184     // Not implemented...
185     XalanNumberFormat(const XalanNumberFormat&);
186 
187     XalanNumberFormat&
188     operator=(const XalanNumberFormat&);
189 
190     bool
191     operator==(const XalanNumberFormat&);
192 
193     // Data members...
194     bool                        m_isGroupingUsed;
195 
196     XalanDOMString              m_groupingSeparator;
197 
198     unsigned long               m_groupingSize;
199 
200     static const XalanDOMChar   s_defaultGroupingSeparator[];
201 };
202 
203 
204 
205 }
206 
207 
208 
209 #endif  // XALANNUMBERFORMAT_HEADER_GUARD_1357924680
210