Main Page   Class Hierarchy   Compound List   File List   Compound Members  

XML256TableTranscoder.hpp

00001 /*
00002  * The Apache Software License, Version 1.1
00003  * 
00004  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
00005  * reserved.
00006  * 
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  * 
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer. 
00013  * 
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  * 
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:  
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  * 
00026  * 4. The names "Xerces" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written 
00029  *    permission, please contact apache\@apache.org.
00030  * 
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  * 
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  * 
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation, and was
00051  * originally based on software copyright (c) 1999, International
00052  * Business Machines, Inc., http://www.ibm.com .  For more information
00053  * on the Apache Software Foundation, please see
00054  * <http://www.apache.org/>.
00055  */
00056 
00057 /*
00058  * $Log: XML256TableTranscoder.hpp,v $
00059  * Revision 1.1  2002/05/11 21:16:11  bhavani
00060  * CR#CR062582# adding xercesc 1.7 file
00061  *
00062  * Revision 1.1.1.1  2002/02/01 22:22:13  peiyongz
00063  * sane_include
00064  *
00065  * Revision 1.1  2000/03/18 00:00:32  roddey
00066  * Initial updates for two way transcoding support
00067  *
00068  */
00069 
00070 
00071 #ifndef XML256TABLETRANSCODER_HPP
00072 #define XML256TABLETRANSCODER_HPP
00073 
00074 #include <xercesc/util/TransService.hpp>
00075 
00076 //
00077 //  This class implements the functionality of a common type of transcoder
00078 //  for an 8 bit, single byte encoding based on a set of 'to' and 'from'
00079 //  translation tables. Actual derived classes are trivial and just have to
00080 //  provide us with pointers to their tables and we do all the work.
00081 //
00082 class XMLUTIL_EXPORT XML256TableTranscoder : public XMLTranscoder
00083 {
00084 public :
00085     // -----------------------------------------------------------------------
00086     //  Public constructors and destructor
00087     // -----------------------------------------------------------------------
00088     virtual ~XML256TableTranscoder();
00089 
00090 
00091     // -----------------------------------------------------------------------
00092     //  The virtual transcoding interface
00093     // -----------------------------------------------------------------------
00094     virtual unsigned int transcodeFrom
00095     (
00096         const   XMLByte* const          srcData
00097         , const unsigned int            srcCount
00098         ,       XMLCh* const            toFill
00099         , const unsigned int            maxChars
00100         ,       unsigned int&           bytesEaten
00101         ,       unsigned char* const    charSizes
00102     );
00103 
00104     virtual unsigned int transcodeTo
00105     (
00106         const   XMLCh* const    srcData
00107         , const unsigned int    srcCount
00108         ,       XMLByte* const  toFill
00109         , const unsigned int    maxBytes
00110         ,       unsigned int&   charsEaten
00111         , const UnRepOpts       options
00112     );
00113 
00114     virtual bool canTranscodeTo
00115     (
00116         const   unsigned int    toCheck
00117     )   const;
00118 
00119 
00120 protected :
00121     // -----------------------------------------------------------------------
00122     //  Hidden constructors
00123     // -----------------------------------------------------------------------
00124     XML256TableTranscoder
00125     (
00126         const   XMLCh* const                        encodingName
00127         , const unsigned int                        blockSize
00128         , const XMLCh* const                        fromTable
00129         , const XMLTransService::TransRec* const    toTable
00130         , const unsigned int                        toTableSize
00131     );
00132 
00133 
00134     // -----------------------------------------------------------------------
00135     //  Protected helper methods
00136     // -----------------------------------------------------------------------
00137     XMLByte xlatOneTo
00138     (
00139         const   XMLCh       toXlat
00140     )   const;
00141 
00142 
00143 private :
00144     // -----------------------------------------------------------------------
00145     //  Unimplemented constructors and operators
00146     // -----------------------------------------------------------------------
00147     XML256TableTranscoder();
00148     XML256TableTranscoder(const XML256TableTranscoder&);
00149     void operator=(const XML256TableTranscoder&);
00150 
00151 
00152     // -----------------------------------------------------------------------
00153     //  Private data members
00154     //
00155     //  fFromTable
00156     //      This is the 'from' table that we were given during construction.
00157     //      It is a 256 entry table of XMLCh chars. Each entry is the
00158     //      Unicode code point for the external encoding point of that value.
00159     //      So fFromTable[N] is the Unicode translation of code point N of
00160     //      the source encoding.
00161     //
00162     //      We don't own this table, we just refer to it. It is assumed that
00163     //      the table is static, for performance reasons.
00164     //
00165     //  fToSize
00166     //      The 'to' table is variable sized. This indicates how many records
00167     //      are in it.
00168     //
00169     //  fToTable
00170     //      This is a variable sized table of TransRec structures. It must
00171     //      be sorted by the intCh field, i.e. the XMLCh field. It is searched
00172     //      binarily to find the record for a particular Unicode char. Then
00173     //      that record's extch field is the translation record.
00174     //
00175     //      We don't own this table, we just refer to it. It is assumed that
00176     //      the table is static, for performance reasons.
00177     //
00178     //      NOTE: There may be dups of the extCh field, since there might be
00179     //      multiple Unicode code points which map to the same external code
00180     //      point. Normally this won't happen, since the parser assumes that
00181     //      internalization is normalized, but we have to be prepared to do
00182     //      the right thing if some client code gives us non-normalized data
00183     //      itself.
00184     // -----------------------------------------------------------------------
00185     const XMLCh*                        fFromTable;
00186     unsigned int                        fToSize;
00187     const XMLTransService::TransRec*    fToTable;
00188 };
00189 
00190 #endif

Generated on Tue Nov 19 09:36:34 2002 by doxygen1.3-rc1