Win32TransService.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:11k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  * 
  4.  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  * 
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer. 
  13.  * 
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  * 
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:  
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  * 
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written 
  29.  *    permission, please contact apache@apache.org.
  30.  * 
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  * 
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  * 
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: Win32TransService.hpp,v $
  58.  * Revision 1.10  2000/05/09 00:22:45  andyh
  59.  * Memory Cleanup.  XMLPlatformUtils::Terminate() deletes all lazily
  60.  * allocated memory; memory leak checking tools will no longer report
  61.  * that leaks exist.  (DOM GetElementsByTagID temporarily removed
  62.  * as part of this.)
  63.  *
  64.  * Revision 1.9  2000/03/18 00:00:04  roddey
  65.  * Initial updates for two way transcoding support
  66.  *
  67.  * Revision 1.8  2000/03/07 23:45:36  roddey
  68.  * First cut for additions to Win32 xcode. Based very loosely on a
  69.  * prototype from Eric Ulevik.
  70.  *
  71.  * Revision 1.7  2000/03/02 19:55:36  roddey
  72.  * This checkin includes many changes done while waiting for the
  73.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  74.  * available elsewhere.
  75.  *
  76.  * Revision 1.6  2000/02/06 07:48:34  rahulj
  77.  * Year 2K copyright swat.
  78.  *
  79.  * Revision 1.5  2000/01/25 22:49:58  roddey
  80.  * Moved the supportsSrcOfs() method from the individual transcoder to the
  81.  * transcoding service, where it should have been to begin with.
  82.  *
  83.  * Revision 1.4  2000/01/25 19:19:09  roddey
  84.  * Simple addition of a getId() method to the xcode and netacess abstractions to
  85.  * allow each impl to give back an id string.
  86.  *
  87.  * Revision 1.3  1999/12/18 00:22:33  roddey
  88.  * Changes to support the new, completely orthagonal, transcoder architecture.
  89.  *
  90.  * Revision 1.2  1999/12/15 19:44:02  roddey
  91.  * Now implements the new transcoding abstractions, with separate interface
  92.  * classes for XML transcoders and local code page transcoders.
  93.  *
  94.  * Revision 1.1.1.1  1999/11/09 01:06:06  twl
  95.  * Initial checkin
  96.  *
  97.  * Revision 1.2  1999/11/08 20:45:35  rahul
  98.  * Swat for adding in Product name and CVS comment log variable.
  99.  *
  100.  */
  101. #ifndef WIN32TRANSSERVICE_HPP
  102. #define WIN32TRANSSERVICE_HPP
  103. #include <util/TransService.hpp>
  104. #include <util/RefHashTableOf.hpp>
  105. #include <windows.h>
  106. class CPMapEntry;
  107. //---------------------------------------------------------------------------
  108. //
  109. //  class Win32TransService
  110. //
  111. //---------------------------------------------------------------------------
  112. class XMLUTIL_EXPORT Win32TransService : public XMLTransService
  113. {
  114. public :
  115.     // -----------------------------------------------------------------------
  116.     //  Constructors and Destructor
  117.     // -----------------------------------------------------------------------
  118.     Win32TransService();
  119.     virtual ~Win32TransService();
  120.     // -----------------------------------------------------------------------
  121.     //  Implementation of the virtual transcoding service API
  122.     // -----------------------------------------------------------------------
  123.     virtual int compareIString
  124.     (
  125.         const   XMLCh* const    comp1
  126.         , const XMLCh* const    comp2
  127.     );
  128.     virtual int compareNIString
  129.     (
  130.         const   XMLCh* const    comp1
  131.         , const XMLCh* const    comp2
  132.         , const unsigned int    maxChars
  133.     );
  134.     virtual const XMLCh* getId() const;
  135.     virtual bool isSpace(const XMLCh toCheck) const;
  136.     virtual XMLLCPTranscoder* makeNewLCPTranscoder();
  137.     virtual bool supportsSrcOfs() const;
  138.     virtual void upperCase(XMLCh* const toUpperCase) const;
  139. protected :
  140.     // -----------------------------------------------------------------------
  141.     //  Protected virtual methods, implemented in Win32TransService2.cpp
  142.     // -----------------------------------------------------------------------
  143.     virtual XMLTranscoder* makeNewXMLTranscoder
  144.     (
  145.         const   XMLCh* const            encodingName
  146.         ,       XMLTransService::Codes& resValue
  147.         , const unsigned int            blockSize
  148.     );
  149. private :
  150.     // -----------------------------------------------------------------------
  151.     //  Unimplemented constructors and operators
  152.     // -----------------------------------------------------------------------
  153.     Win32TransService(const Win32TransService&);
  154.     void operator=(const Win32TransService&);
  155.     //      This is a hash table of entries which map encoding names to their
  156.     //      Windows specific code pages. The code page allows us to create
  157.     //      transcoders for those encodings. The encoding names come from XML
  158.     //      files.
  159.     //
  160.     //      This map is shared unsynchronized among all threads of the process,
  161.     //      which is cool since it will be read only once its initialized.
  162.     static bool isAlias(const   HKEY            encodingKey
  163.                     ,       char* const     aliasBuf = 0
  164.                     , const unsigned int    nameBufSz = 0);
  165.     RefHashTableOf<CPMapEntry>    *fCPMap;
  166. };
  167. //---------------------------------------------------------------------------
  168. //
  169. //  class Win32Transcoder
  170. //
  171. //---------------------------------------------------------------------------
  172. class XMLUTIL_EXPORT Win32Transcoder : public XMLTranscoder
  173. {
  174. public :
  175.     // -----------------------------------------------------------------------
  176.     //  Constructors and Destructor
  177.     // -----------------------------------------------------------------------
  178.     Win32Transcoder
  179.     (
  180.         const   XMLCh* const    encodingName
  181.         , const unsigned int    winCP
  182.         , const unsigned int    ieCP
  183.         , const unsigned int    blockSize);
  184.     ~Win32Transcoder();
  185.     // -----------------------------------------------------------------------
  186.     //  Implementation of the virtual transcoder interface
  187.     // -----------------------------------------------------------------------
  188.     virtual unsigned int transcodeFrom
  189.     (
  190.         const   XMLByte* const          srcData
  191.         , const unsigned int            srcCount
  192.         ,       XMLCh* const            toFill
  193.         , const unsigned int            maxChars
  194.         ,       unsigned int&           bytesEaten
  195.         ,       unsigned char* const    charSizes
  196.     );
  197.     virtual unsigned int transcodeTo
  198.     (
  199.         const   XMLCh* const    srcData
  200.         , const unsigned int    srcCount
  201.         ,       XMLByte* const  toFill
  202.         , const unsigned int    maxBytes
  203.         ,       unsigned int&   charsEaten
  204.         , const UnRepOpts       options
  205.     );
  206.     virtual bool canTranscodeTo
  207.     (
  208.         const   unsigned int    toCheck
  209.     )   const;
  210. private :
  211.     // -----------------------------------------------------------------------
  212.     //  Unimplemented constructors and operators
  213.     // -----------------------------------------------------------------------
  214.     Win32Transcoder(const Win32Transcoder&);
  215.     void operator=(const Win32Transcoder&);
  216.     // -----------------------------------------------------------------------
  217.     //  Private data members
  218.     //
  219.     //  fIECP
  220.     //      This is the internet explorer code page for this encoding.
  221.     //
  222.     //  fWinCP
  223.     //      This is the windows code page for this encoding.
  224.     // -----------------------------------------------------------------------
  225.     unsigned int    fIECP;
  226.     unsigned int    fWinCP;
  227. };
  228. //---------------------------------------------------------------------------
  229. //
  230. //  class Win32LCPTranscoder
  231. //
  232. //---------------------------------------------------------------------------
  233. class XMLUTIL_EXPORT Win32LCPTranscoder : public XMLLCPTranscoder
  234. {
  235. public :
  236.     // -----------------------------------------------------------------------
  237.     //  Constructors and Destructor
  238.     // -----------------------------------------------------------------------
  239.     Win32LCPTranscoder();
  240.     ~Win32LCPTranscoder();
  241.     // -----------------------------------------------------------------------
  242.     //  Implementation of the virtual transcoder interface
  243.     // -----------------------------------------------------------------------
  244.     virtual unsigned int calcRequiredSize(const char* const srcText);
  245.     virtual unsigned int calcRequiredSize(const XMLCh* const srcText);
  246.     virtual char* transcode(const XMLCh* const toTranscode);
  247.     virtual XMLCh* transcode(const char* const toTranscode);
  248.     virtual bool transcode
  249.     (
  250.         const   char* const     toTranscode
  251.         ,       XMLCh* const    toFill
  252.         , const unsigned int    maxChars
  253.     );
  254.     virtual bool transcode
  255.     (
  256.         const   XMLCh* const    toTranscode
  257.         ,       char* const     toFill
  258.         , const unsigned int    maxChars
  259.     );
  260. private :
  261.     // -----------------------------------------------------------------------
  262.     //  Unimplemented constructors and operators
  263.     // -----------------------------------------------------------------------
  264.     Win32LCPTranscoder(const Win32LCPTranscoder&);
  265.     void operator=(const Win32LCPTranscoder&);
  266. };
  267. #endif