Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:15:13

0001 /*
0002  * Licensed to the Apache Software Foundation (ASF) under one or more
0003  * contributor license agreements.  See the NOTICE file distributed with
0004  * this work for additional information regarding copyright ownership.
0005  * The ASF licenses this file to You under the Apache License, Version 2.0
0006  * (the "License"); you may not use this file except in compliance with
0007  * the License.  You may obtain a copy of the License at
0008  *
0009  *      http://www.apache.org/licenses/LICENSE-2.0
0010  *
0011  * Unless required by applicable law or agreed to in writing, software
0012  * distributed under the License is distributed on an "AS IS" BASIS,
0013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014  * See the License for the specific language governing permissions and
0015  * limitations under the License.
0016  */
0017 
0018 /*
0019  * $Id$
0020  */
0021 
0022 #if !defined(XERCESC_INCLUDE_GUARD_TRANSSERVICE_HPP)
0023 #define XERCESC_INCLUDE_GUARD_TRANSSERVICE_HPP
0024 
0025 #include <xercesc/util/XMemory.hpp>
0026 #include <xercesc/util/PlatformUtils.hpp>
0027 #include <xercesc/framework/XMLRecognizer.hpp>
0028 #include <xercesc/util/RefHashTableOf.hpp>
0029 #include <xercesc/util/RefVectorOf.hpp>
0030 #include <xercesc/util/Janitor.hpp>
0031 
0032 XERCES_CPP_NAMESPACE_BEGIN
0033 
0034 // Forward references
0035 //class XMLPlatformUtils;
0036 class XMLLCPTranscoder;
0037 class XMLTranscoder;
0038 class ENameMap;
0039 
0040 
0041 //
0042 //  This class is an abstract base class which are used to abstract the
0043 //  transcoding services that Xerces uses. The parser's actual transcoding
0044 //  needs are small so it is desirable to allow different implementations
0045 //  to be provided.
0046 //
0047 //  The transcoding service has to provide a couple of required string
0048 //  and character operations, but its most important service is the creation
0049 //  of transcoder objects. There are two types of transcoders, which are
0050 //  discussed below in the XMLTranscoder class' description.
0051 //
0052 class XMLUTIL_EXPORT XMLTransService : public XMemory
0053 {
0054 public :
0055     // -----------------------------------------------------------------------
0056     //  Class specific types
0057     // -----------------------------------------------------------------------
0058     enum Codes
0059     {
0060         Ok
0061         , UnsupportedEncoding
0062         , InternalFailure
0063         , SupportFilesNotFound
0064     };
0065 
0066     struct TransRec
0067     {
0068         XMLCh       intCh;
0069         XMLByte     extCh;
0070     };
0071 
0072 
0073     // -----------------------------------------------------------------------
0074     //  Public constructors and destructor
0075     // -----------------------------------------------------------------------
0076     virtual ~XMLTransService();
0077 
0078 
0079     // -----------------------------------------------------------------------
0080     //  Non-virtual API
0081     // -----------------------------------------------------------------------
0082     XMLTranscoder* makeNewTranscoderFor
0083     (
0084         const   XMLCh* const            encodingName
0085         ,       XMLTransService::Codes& resValue
0086         , const XMLSize_t               blockSize
0087         , MemoryManager* const          manager = XMLPlatformUtils::fgMemoryManager
0088     );
0089 
0090     XMLTranscoder* makeNewTranscoderFor
0091     (
0092         const   char* const             encodingName
0093         ,       XMLTransService::Codes& resValue
0094         , const XMLSize_t               blockSize
0095         , MemoryManager* const          manager = XMLPlatformUtils::fgMemoryManager
0096     );
0097 
0098     XMLTranscoder* makeNewTranscoderFor
0099     (
0100         XMLRecognizer::Encodings        encodingEnum
0101         ,       XMLTransService::Codes& resValue
0102         , const XMLSize_t               blockSize
0103         , MemoryManager* const          manager = XMLPlatformUtils::fgMemoryManager
0104     );
0105 
0106 
0107     // -----------------------------------------------------------------------
0108     //  The virtual transcoding service API
0109     // -----------------------------------------------------------------------
0110     virtual int compareIString
0111     (
0112         const   XMLCh* const    comp1
0113         , const XMLCh* const    comp2
0114     ) = 0;
0115 
0116     virtual int compareNIString
0117     (
0118         const   XMLCh* const    comp1
0119         , const XMLCh* const    comp2
0120         , const XMLSize_t       maxChars
0121     ) = 0;
0122 
0123     virtual const XMLCh* getId() const = 0;
0124 
0125     // -----------------------------------------------------------------------
0126     //    Create a new transcoder for the local code page.
0127     //
0128     //  @param manager The memory manager to use.
0129     // -----------------------------------------------------------------------
0130     virtual XMLLCPTranscoder* makeNewLCPTranscoder(MemoryManager* manager) = 0;
0131 
0132     virtual bool supportsSrcOfs() const = 0;
0133 
0134     virtual void upperCase(XMLCh* const toUpperCase) = 0;
0135     virtual void lowerCase(XMLCh* const toLowerCase) = 0;
0136 
0137     // -----------------------------------------------------------------------
0138     //    Allow users to add their own encodings to the intrinsic mapping
0139     //    table
0140     //    Usage:
0141     //        XMLTransService::addEncoding (
0142     //            gMyEncodingNameString
0143     //            , new ENameMapFor<MyTransClassType>(gMyEncodingNameString)
0144     //        );
0145     // -----------------------------------------------------------------------
0146     static void addEncoding(const XMLCh* const encoding, ENameMap* const ownMapping);
0147 
0148 
0149 protected :
0150     // -----------------------------------------------------------------------
0151     //  Hidden constructors
0152     // -----------------------------------------------------------------------
0153     XMLTransService();
0154 
0155 
0156     // -----------------------------------------------------------------------
0157     //  Protected virtual methods.
0158     // -----------------------------------------------------------------------
0159 #ifdef OS390
0160     friend class Uniconv390TransService;
0161 #endif
0162     virtual XMLTranscoder* makeNewXMLTranscoder
0163     (
0164         const   XMLCh* const            encodingName
0165         ,       XMLTransService::Codes& resValue
0166         , const XMLSize_t               blockSize
0167         , MemoryManager* const          manager
0168     ) = 0;
0169 
0170     // -----------------------------------------------------------------------
0171     //  Protected init method for platform utils to call
0172     // -----------------------------------------------------------------------
0173     friend class XMLPlatformUtils;
0174     virtual void initTransService();
0175 
0176     // -----------------------------------------------------------------------
0177     // protected static members
0178     //  gMappings
0179     //      This is a hash table of ENameMap objects. It is created and filled
0180     //      in when the platform init calls our initTransService() method.
0181     //
0182     //  gMappingsRecognizer
0183     //      This is an array of ENameMap objects, predefined for those
0184     //      already recognized by XMLRecognizer::Encodings.
0185     //
0186 
0187     static RefHashTableOf<ENameMap>*    gMappings;
0188     static RefVectorOf<ENameMap>*       gMappingsRecognizer;
0189 
0190 private :
0191     // -----------------------------------------------------------------------
0192     //  Unimplemented constructors and operators
0193     // -----------------------------------------------------------------------
0194     XMLTransService(const XMLTransService&);
0195     XMLTransService& operator=(const XMLTransService&);
0196 
0197     // -----------------------------------------------------------------------
0198     //  Hidden method to enable/disable strict IANA encoding check
0199     //  Caller: XMLPlatformUtils
0200     // -----------------------------------------------------------------------
0201     void strictIANAEncoding(const bool newState);
0202     bool isStrictIANAEncoding();
0203 
0204     friend class XMLInitializer;
0205 };
0206 
0207 /**
0208   *   <code>XMLTranscoder</code> is for transcoding non-local code
0209   *   page encodings, i.e.  named encodings. These are used internally
0210   *   by the scanner to internalize raw XML into the internal Unicode
0211   *   format, and by writer classes to convert that internal Unicode
0212   *   format (which comes out of the parser) back out to a format that
0213   *   the receiving client code wants to use.
0214   */
0215 class XMLUTIL_EXPORT XMLTranscoder : public XMemory
0216 {
0217 public :
0218 
0219     /**
0220      * This enum is used by the <code>transcodeTo()</code> method
0221      * to indicate how to react to unrepresentable characters. The
0222      * <code>transcodeFrom()</code> method always works the
0223      * same. It will consider any invalid data to be an error and
0224      * throw.
0225      */
0226     enum UnRepOpts
0227     {
0228         UnRep_Throw        /**< Throw an exception */
0229         , UnRep_RepChar        /**< Use the replacement char */
0230     };
0231 
0232 
0233     /** @name Destructor. */
0234     //@{
0235 
0236      /**
0237       * Destructor for XMLTranscoder
0238       *
0239       */
0240     virtual ~XMLTranscoder();
0241     //@}
0242 
0243 
0244 
0245     /** @name The virtual transcoding interface */
0246     //@{
0247 
0248     /** Converts from the encoding of the service to the internal XMLCh* encoding
0249       *
0250       * @param srcData the source buffer to be transcoded
0251       * @param srcCount number of bytes in the source buffer
0252       * @param toFill the destination buffer
0253       * @param maxChars the max number of characters in the destination buffer
0254       * @param bytesEaten after transcoding, this will hold the number of bytes
0255       *    that were processed from the source buffer
0256       * @param charSizes an array which must be at least as big as maxChars
0257       *    into which will be inserted values that indicate how many
0258       *    bytes from the input went into each XMLCh that was created
0259       *    into toFill. Since many encodings use variable numbers of
0260       *    byte per character, this provides a means to find out what
0261       *    bytes in the input went into making a particular output
0262       *    UTF-16 character.
0263       * @return Returns the number of chars put into the target buffer
0264       */
0265 
0266 
0267     virtual XMLSize_t transcodeFrom
0268     (
0269         const   XMLByte* const          srcData
0270         , const XMLSize_t               srcCount
0271         ,       XMLCh* const            toFill
0272         , const XMLSize_t               maxChars
0273         ,       XMLSize_t&              bytesEaten
0274         ,       unsigned char* const    charSizes
0275     ) = 0;
0276 
0277     /** Converts from the internal XMLCh* encoding to the encoding of the service
0278       *
0279       * @param srcData    the source buffer to be transcoded
0280       * @param srcCount   number of characters in the source buffer
0281       * @param toFill     the destination buffer
0282       * @param maxBytes   the max number of bytes in the destination buffer
0283       * @param charsEaten after transcoding, this will hold the number of chars
0284       *    that were processed from the source buffer
0285       * @param options    options to pass to the transcoder that explain how to
0286       *    respond to an unrepresentable character
0287       * @return Returns the number of chars put into the target buffer
0288       */
0289 
0290     virtual XMLSize_t transcodeTo
0291     (
0292         const   XMLCh* const    srcData
0293         , const XMLSize_t       srcCount
0294         ,       XMLByte* const  toFill
0295         , const XMLSize_t       maxBytes
0296         ,       XMLSize_t&      charsEaten
0297         , const UnRepOpts       options
0298     ) = 0;
0299 
0300     /** Query whether the transcoder can handle a given character
0301       *
0302       * @param toCheck   the character code point to check
0303       */
0304 
0305     virtual bool canTranscodeTo
0306     (
0307         const   unsigned int    toCheck
0308     ) = 0;
0309 
0310     //@}
0311 
0312     /** @name Getter methods */
0313     //@{
0314 
0315     /** Get the internal block size
0316      *
0317        * @return The block size indicated in the constructor.
0318        */
0319     XMLSize_t getBlockSize() const;
0320 
0321     /** Get the encoding name
0322       *
0323       * @return the name of the encoding that this
0324       *    <code>XMLTranscoder</code> object is for
0325       */
0326     const XMLCh* getEncodingName() const;
0327     //@}
0328 
0329     /** @name Getter methods*/
0330     //@{
0331 
0332     /** Get the plugged-in memory manager
0333       *
0334       * This method returns the plugged-in memory manager user for dynamic
0335       * memory allocation/deallocation.
0336       *
0337       * @return the plugged-in memory manager
0338       */
0339     MemoryManager* getMemoryManager() const;
0340 
0341     //@}
0342 
0343 protected :
0344     // -----------------------------------------------------------------------
0345     //  Hidden constructors
0346     // -----------------------------------------------------------------------
0347     XMLTranscoder
0348     (
0349         const   XMLCh* const    encodingName
0350         , const XMLSize_t       blockSize
0351         , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
0352     );
0353 
0354 
0355     // -----------------------------------------------------------------------
0356     //  Protected helper methods
0357     // -----------------------------------------------------------------------
0358 
0359 private :
0360     // -----------------------------------------------------------------------
0361     //  Unimplemented constructors and operators
0362     // -----------------------------------------------------------------------
0363     XMLTranscoder(const XMLTranscoder&);
0364     XMLTranscoder& operator=(const XMLTranscoder&);
0365 
0366     // -----------------------------------------------------------------------
0367     //  Private data members
0368     //
0369     //  fBlockSize
0370     //      This is the block size indicated in the constructor.
0371     //
0372     //  fEncodingName
0373     //      This is the name of the encoding this encoder is for. All basic
0374     //      XML transcoder's are for named encodings.
0375     // -----------------------------------------------------------------------
0376     XMLSize_t       fBlockSize;
0377     XMLCh*          fEncodingName;
0378     MemoryManager*  fMemoryManager;
0379 };
0380 
0381 
0382 //
0383 //  This class is a specialized transcoder that only transcodes between
0384 //  the internal XMLCh format and the local code page. It is specialized
0385 //  for the very common job of translating data from the client app's
0386 //  native code page to the internal format and vice versa.
0387 //
0388 class XMLUTIL_EXPORT XMLLCPTranscoder : public XMemory
0389 {
0390 public :
0391     // -----------------------------------------------------------------------
0392     //  Public constructors and destructor
0393     // -----------------------------------------------------------------------
0394     virtual ~XMLLCPTranscoder();
0395 
0396 
0397     // -----------------------------------------------------------------------
0398     //  The virtual transcoder API
0399     //
0400     //  NOTE:   All these APIs don't include null terminator characters in
0401     //          their parameters. So calcRequiredSize() returns the number
0402     //          of actual chars, not including the null. maxBytes and maxChars
0403     //          parameters refer to actual chars, not including the null so
0404     //          its assumed that the buffer is physically one char or byte
0405     //          larger.
0406     // -----------------------------------------------------------------------
0407 
0408     // -----------------------------------------------------------------------
0409     //  The 'normal' way to transcode a XMLCh-string from/to local string
0410     //  representation
0411     //
0412     //  NOTE: Both methods return a string allocated via the MemoryManager.
0413     //        It is the responsibility of the calling environment to
0414     //        release this string after use.
0415     // -----------------------------------------------------------------------
0416     virtual char* transcode(const XMLCh* const toTranscode,
0417                             MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
0418 
0419     virtual XMLCh* transcode(const char* const toTranscode,
0420                              MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
0421 
0422 
0423     // -----------------------------------------------------------------------
0424     //  DEPRECATED old transcode interface
0425     // -----------------------------------------------------------------------
0426     virtual XMLSize_t calcRequiredSize(const char* const srcText
0427         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
0428 
0429     virtual XMLSize_t calcRequiredSize(const XMLCh* const srcText
0430         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
0431 
0432     virtual bool transcode
0433     (
0434         const   char* const     toTranscode
0435         ,       XMLCh* const    toFill
0436         , const XMLSize_t       maxChars
0437         , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
0438     ) = 0;
0439 
0440     virtual bool transcode
0441     (
0442         const   XMLCh* const    toTranscode
0443         ,       char* const     toFill
0444         , const XMLSize_t       maxBytes
0445         , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
0446     ) = 0;
0447 
0448 
0449 protected :
0450     // -----------------------------------------------------------------------
0451     //  Hidden constructors
0452     // -----------------------------------------------------------------------
0453     XMLLCPTranscoder();
0454 
0455 
0456 private :
0457     // -----------------------------------------------------------------------
0458     //  Unimplemented constructors and operators
0459     // -----------------------------------------------------------------------
0460     XMLLCPTranscoder(const XMLLCPTranscoder&);
0461     XMLLCPTranscoder& operator=(const XMLLCPTranscoder&);
0462 };
0463 
0464 //
0465 // This class can be used to transcode to a target encoding. It manages the
0466 // memory allocated for the transcode in an exception safe manner, automatically
0467 // deleting it when the class goes out of scope.
0468 //
0469 class XMLUTIL_EXPORT TranscodeToStr
0470 {
0471 public:
0472     // -----------------------------------------------------------------------
0473     //  Public constructors and destructor
0474     // -----------------------------------------------------------------------
0475 
0476     /** Converts from the internal XMLCh* encoding to the specified encoding
0477       *
0478       * @param in       the null terminated source buffer to be transcoded
0479       * @param encoding the name of the encoding to transcode to
0480       * @param manager  the memory manager to use
0481       */
0482     TranscodeToStr(const XMLCh *in, const char *encoding,
0483                    MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0484 
0485     /** Converts from the internal XMLCh* encoding to the specified encoding
0486       *
0487       * @param in       the source buffer to be transcoded
0488       * @param length   the length of the source buffer
0489       * @param encoding the name of the encoding to transcode to
0490       * @param manager  the memory manager to use
0491       */
0492     TranscodeToStr(const XMLCh *in, XMLSize_t length, const char *encoding,
0493                    MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0494 
0495     /** Converts from the internal XMLCh* encoding to the specified encoding
0496       *
0497       * @param in       the null terminated source buffer to be transcoded
0498       * @param trans    the transcoder to use
0499       * @param manager  the memory manager to use
0500       */
0501     TranscodeToStr(const XMLCh *in, XMLTranscoder* trans,
0502                    MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0503 
0504     /** Converts from the internal XMLCh* encoding to the specified encoding
0505       *
0506       * @param in       the source buffer to be transcoded
0507       * @param length   the length of the source buffer
0508       * @param trans    the transcoder to use
0509       * @param manager  the memory manager to use
0510       */
0511     TranscodeToStr(const XMLCh *in, XMLSize_t length, XMLTranscoder* trans,
0512                    MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0513 
0514     ~TranscodeToStr();
0515 
0516     /** @name Getter methods */
0517     //@{
0518 
0519     /** Returns the transcoded, null terminated string
0520       * @return the transcoded string
0521       */
0522     const XMLByte *str() const;
0523 
0524     /** Returns the transcoded, null terminated string - adopting
0525       * the memory allocated to it from the TranscodeToStr object
0526       * @return the transcoded string
0527       */
0528     XMLByte *adopt();
0529 
0530     /** Returns the length of the transcoded string in bytes. The length
0531       * does not include the null terminator.
0532       * @return the length of the transcoded string in bytes
0533       */
0534     XMLSize_t length () const;
0535 
0536     //@}
0537 
0538 private:
0539     // -----------------------------------------------------------------------
0540     //  Unimplemented constructors and operators
0541     // -----------------------------------------------------------------------
0542     TranscodeToStr(const TranscodeToStr &);
0543     TranscodeToStr &operator=(const TranscodeToStr &);
0544 
0545     // -----------------------------------------------------------------------
0546     //  Private helper methods
0547     // -----------------------------------------------------------------------
0548     void transcode(const XMLCh *in, XMLSize_t len, XMLTranscoder* trans);
0549 
0550     // -----------------------------------------------------------------------
0551     //  Private data members
0552     //
0553     //  fString
0554     //      The transcoded string
0555     //
0556     //  fBytesWritten
0557     //      The length of the transcoded string in bytes
0558     // -----------------------------------------------------------------------
0559     ArrayJanitor<XMLByte> fString;
0560     XMLSize_t fBytesWritten;
0561     MemoryManager *fMemoryManager;
0562 };
0563 
0564 //
0565 // This class can be used to transcode from a source encoding. It manages the
0566 // memory allocated for the transcode in an exception safe manner, automatically
0567 // deleting it when the class goes out of scope.
0568 //
0569 class XMLUTIL_EXPORT TranscodeFromStr
0570 {
0571 public:
0572     // -----------------------------------------------------------------------
0573     //  Public constructors and destructor
0574     // -----------------------------------------------------------------------
0575 
0576     /** Converts from the specified encoding to the internal XMLCh* encoding
0577       *
0578       * @param data     the source buffer to be transcoded
0579       * @param length   the length of the source buffer
0580       * @param encoding the name of the encoding to transcode to
0581       * @param manager  the memory manager to use
0582       */
0583     TranscodeFromStr(const XMLByte *data, XMLSize_t length, const char *encoding,
0584                      MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0585 
0586     /** Converts from the specified encoding to the internal XMLCh* encoding
0587       *
0588       * @param data     the source buffer to be transcoded
0589       * @param length   the length of the source buffer
0590       * @param trans    the transcoder to use
0591       * @param manager  the memory manager to use
0592       */
0593     TranscodeFromStr(const XMLByte *data, XMLSize_t length, XMLTranscoder *trans,
0594                      MemoryManager *manager = XMLPlatformUtils::fgMemoryManager);
0595 
0596     ~TranscodeFromStr();
0597 
0598     /** @name Getter methods */
0599     //@{
0600 
0601     /** Returns the transcoded, null terminated string
0602       * @return the transcoded string
0603       */
0604     const XMLCh *str() const;
0605 
0606     /** Returns the transcoded, null terminated string - adopting
0607       * the memory allocated to it from the TranscodeFromStr object
0608       * @return the transcoded string
0609       */
0610     XMLCh *adopt();
0611 
0612     /** Returns the length of the transcoded string in characters. The length
0613       * does not include the null terminator.
0614       * @return the length of the transcoded string in characters
0615       */
0616     XMLSize_t length() const;
0617 
0618     //@}
0619 
0620 private:
0621     // -----------------------------------------------------------------------
0622     //  Unimplemented constructors and operators
0623     // -----------------------------------------------------------------------
0624     TranscodeFromStr(const TranscodeFromStr &);
0625     TranscodeFromStr &operator=(const TranscodeFromStr &);
0626 
0627     // -----------------------------------------------------------------------
0628     //  Private helper methods
0629     // -----------------------------------------------------------------------
0630     void transcode(const XMLByte *in, XMLSize_t length, XMLTranscoder *trans);
0631 
0632     // -----------------------------------------------------------------------
0633     //  Private data members
0634     //
0635     //  fString
0636     //      The transcoded string
0637     //
0638     //  fCharsWritten
0639     //      The length of the transcoded string in characters
0640     // -----------------------------------------------------------------------
0641     ArrayJanitor<XMLCh> fString;
0642     XMLSize_t fCharsWritten;
0643     MemoryManager *fMemoryManager;
0644 };
0645 
0646 // ---------------------------------------------------------------------------
0647 //  XMLTranscoder: Getter methods
0648 // ---------------------------------------------------------------------------
0649 inline MemoryManager* XMLTranscoder::getMemoryManager() const
0650 {
0651     return fMemoryManager;
0652 }
0653 
0654 // ---------------------------------------------------------------------------
0655 //  XMLTranscoder: Protected helper methods
0656 // ---------------------------------------------------------------------------
0657 inline XMLSize_t XMLTranscoder::getBlockSize() const
0658 {
0659     return fBlockSize;
0660 }
0661 
0662 inline const XMLCh* XMLTranscoder::getEncodingName() const
0663 {
0664     return fEncodingName;
0665 }
0666 
0667 // ---------------------------------------------------------------------------
0668 //  TranscodeToStr: Getter methods
0669 // ---------------------------------------------------------------------------
0670 inline const XMLByte *TranscodeToStr::str() const
0671 {
0672     return fString.get();
0673 }
0674 
0675 inline XMLByte *TranscodeToStr::adopt()
0676 {
0677     fBytesWritten = 0;
0678     return fString.release();
0679 }
0680 
0681 inline XMLSize_t TranscodeToStr::length () const
0682 {
0683     return fBytesWritten;
0684 }
0685 
0686 // ---------------------------------------------------------------------------
0687 //  TranscodeFromStr: Getter methods
0688 // ---------------------------------------------------------------------------
0689 inline const XMLCh *TranscodeFromStr::str() const
0690 {
0691     return fString.get();
0692 }
0693 
0694 inline XMLCh *TranscodeFromStr::adopt()
0695 {
0696     fCharsWritten = 0;
0697     return fString.release();
0698 }
0699 
0700 inline XMLSize_t TranscodeFromStr::length() const
0701 {
0702     return fCharsWritten;
0703 }
0704 
0705 XERCES_CPP_NAMESPACE_END
0706 
0707 #endif