source: icXML/icXML-devel/src/icxercesc/util/Transcoders/ICU/ICUTransService.hpp @ 3152

Last change on this file since 3152 was 3152, checked in by cameron, 6 years ago

New custom icxercesc files

File size: 8.5 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: ICUTransService.hpp 932887 2010-04-11 13:04:59Z borisk $
20 */
21
22#if !defined(XERCESC_INCLUDE_GUARD_ICUTRANSSERVICE_HPP)
23#define XERCESC_INCLUDE_GUARD_ICUTRANSSERVICE_HPP
24
25#include <xercesc/util/Mutexes.hpp>
26#include <xercesc/util/TransService.hpp>
27
28struct UConverter;
29
30XERCES_CPP_NAMESPACE_BEGIN
31
32class XMLUTIL_EXPORT ICUTransService : public XMLTransService
33{
34public :
35    friend class Uniconv390TransService;
36    // -----------------------------------------------------------------------
37    //  Constructors and Destructor
38    // -----------------------------------------------------------------------
39    ICUTransService(MemoryManager* manager);
40    ~ICUTransService();
41
42
43    // -----------------------------------------------------------------------
44    //  Implementation of the virtual transcoding service API
45    // -----------------------------------------------------------------------
46    virtual int compareIString
47    (
48        const   XMLCh* const    comp1
49        , const XMLCh* const    comp2
50    );
51
52    virtual int compareNIString
53    (
54        const   XMLCh* const    comp1
55        , const XMLCh* const    comp2
56        , const XMLSize_t       maxChars
57    );
58
59    virtual const XMLCh* getId() const;
60
61    virtual XMLLCPTranscoder* makeNewLCPTranscoder(MemoryManager* manager);
62
63    virtual bool supportsSrcOfs() const;
64
65    virtual void upperCase(XMLCh* const toUpperCase);
66    virtual void lowerCase(XMLCh* const toLowerCase);
67
68
69protected :
70    // -----------------------------------------------------------------------
71    //  Protected virtual methods
72    // -----------------------------------------------------------------------
73    virtual XMLTranscoder* makeNewXMLTranscoder
74    (
75        const   XMLCh* const            encodingName
76        ,       XMLTransService::Codes& resValue
77        , const XMLSize_t               blockSize
78        ,       MemoryManager* const    manager
79    );
80
81
82private :
83    // -----------------------------------------------------------------------
84    //  Unimplemented constructors and operators
85    // -----------------------------------------------------------------------
86    ICUTransService(const ICUTransService&);
87    ICUTransService& operator=(const ICUTransService&);
88};
89
90
91
92class XMLUTIL_EXPORT ICUTranscoder : public XMLTranscoder
93{
94public :
95    // -----------------------------------------------------------------------
96    //  Constructors and Destructor
97    // -----------------------------------------------------------------------
98    ICUTranscoder
99    (
100        const   XMLCh* const        encodingName
101        ,       UConverter* const   toAdopt
102        , const XMLSize_t           blockSize
103        , MemoryManager* const      manager = XMLPlatformUtils::fgMemoryManager
104    );
105    ~ICUTranscoder();
106
107
108    // -----------------------------------------------------------------------
109    //  Implementation of the virtual transcoder interface
110    // -----------------------------------------------------------------------
111    virtual XMLSize_t transcodeFrom
112    (
113        const   XMLByte* const          srcData
114        , const XMLSize_t               srcCount
115        ,       XMLCh* const            toFill
116        , const XMLSize_t               maxChars
117        ,       XMLSize_t&              bytesEaten
118        ,       unsigned char* const    charSizes
119    );
120
121    virtual XMLSize_t transcodeFrom
122    (
123        const   XMLByte* const          srcData
124        , const XMLSize_t               srcCount
125        ,       XMLCh* const            toFill
126        , const XMLSize_t               maxChars
127        ,       XMLSize_t&              bytesEaten
128    );
129
130    virtual XMLSize_t transcodeTo
131    (
132        const   XMLCh* const    srcData
133        , const XMLSize_t       srcCount
134        ,       XMLByte* const  toFill
135        , const XMLSize_t       maxBytes
136        ,       XMLSize_t&      charsEaten
137        , const UnRepOpts       options
138    );
139
140    virtual bool canTranscodeTo
141    (
142        const   unsigned int    toCheck
143    );
144
145
146
147private :
148    // -----------------------------------------------------------------------
149    //  Unimplemented constructors and operators
150    // -----------------------------------------------------------------------
151    ICUTranscoder();
152    ICUTranscoder(const ICUTranscoder&);
153    ICUTranscoder& operator=(const ICUTranscoder&);
154
155
156    // -----------------------------------------------------------------------
157    //  Private data members
158    //
159    //  fConverter
160    //      This is a pointer to the ICU converter that this transcoder
161    //      uses.
162    //
163    //  fFixed
164    //      This is set to true if the encoding is a fixed size one. This
165    //      can be used to optimize some operations.
166    //
167    //  fSrcOffsets
168    //      This is an array of longs, which are allocated to the size of
169    //      the transcoding block (if any) indicated in the ctor. It is used
170    //      to get the character offsets from ICU, which are then translated
171    //      into an array of char sizes for return.
172    // -----------------------------------------------------------------------
173    UConverter*     fConverter;
174    bool            fFixed;
175    XMLUInt32*      fSrcOffsets;
176};
177
178
179class XMLUTIL_EXPORT ICULCPTranscoder : public XMLLCPTranscoder
180{
181public :
182    // -----------------------------------------------------------------------
183    //  Constructors and Destructor
184    // -----------------------------------------------------------------------
185    ICULCPTranscoder(UConverter* const toAdopt);
186    ~ICULCPTranscoder();
187
188
189    // -----------------------------------------------------------------------
190    //  Implementation of the virtual transcoder interface
191    // -----------------------------------------------------------------------
192    virtual char* transcode(const XMLCh* const toTranscode,
193                            MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
194
195    virtual XMLCh* transcode(const char* const toTranscode,
196                             MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
197
198
199    // -----------------------------------------------------------------------
200    //  DEPRECATED old transcode interface
201    // -----------------------------------------------------------------------
202    virtual XMLSize_t calcRequiredSize(const char* const srcText
203        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
204
205    virtual XMLSize_t calcRequiredSize(const XMLCh* const srcText
206        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
207
208    virtual bool transcode
209    (
210        const   char* const     toTranscode
211        ,       XMLCh* const    toFill
212        , const XMLSize_t       maxChars
213        , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
214    );
215
216    virtual bool transcode
217    (
218        const   XMLCh* const    toTranscode
219        ,       char* const     toFill
220        , const XMLSize_t       maxChars
221        , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
222    );
223
224
225
226private :
227    // -----------------------------------------------------------------------
228    //  Unimplemented constructors and operators
229    // -----------------------------------------------------------------------
230    ICULCPTranscoder();
231    ICULCPTranscoder(const ICULCPTranscoder&);
232    ICULCPTranscoder& operator=(const ICULCPTranscoder&);
233
234
235    // -----------------------------------------------------------------------
236    //  Private data members
237    //
238    //  fConverter
239    //      This is a pointer to the ICU converter that this transcoder
240    //      uses.
241    //
242    //  fMutex
243    //      We have to synchronize threaded calls to the converter.
244    // -----------------------------------------------------------------------
245    UConverter*     fConverter;
246    XMLMutex        fMutex;
247};
248
249XERCES_CPP_NAMESPACE_END
250
251#endif
Note: See TracBrowser for help on using the repository browser.