Encoding_Converter_Factory.cpp

Go to the documentation of this file.
00001 // $Id: Encoding_Converter_Factory.cpp 80826 2008-03-04 14:51:23Z wotte $
00002 #include "ace/Encoding_Converter_Factory.h"
00003 
00004 #if defined (ACE_USES_WCHAR)
00005 #include "ace/UTF32_Encoding_Converter.h"
00006 #include "ace/UTF16_Encoding_Converter.h"
00007 #include "ace/UTF8_Encoding_Converter.h"
00008 #include "ace/OS_Memory.h"
00009 
00010 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00011 
00012 ACE_Encoding_Converter*
00013 ACE_Encoding_Converter_Factory::create (
00014                        const ACE_Byte* source,
00015                        size_t source_size,
00016                        ACE_Encoding_Converter_Factory::Encoding_Hint hint)
00017 {
00018 #if defined (ACE_BIG_ENDIAN)
00019   bool const convert_for_bigendian = true;
00020 #else
00021   bool const convert_for_bigendian = false;
00022 #endif /* ACE_BIG_ENDIAN */
00023   ACE_Encoding_Converter* converter = 0;
00024 
00025   switch (hint)
00026     {
00027     case ACE_UTF_32BE:
00028       ACE_NEW_RETURN (converter,
00029                       ACE_UTF32_Encoding_Converter (!convert_for_bigendian),
00030                       0);
00031       break;
00032     case ACE_UTF_32LE:
00033       ACE_NEW_RETURN (converter,
00034                       ACE_UTF32_Encoding_Converter (convert_for_bigendian),
00035                       0);
00036       break;
00037     case ACE_UTF_16BE:
00038       ACE_NEW_RETURN (converter,
00039                       ACE_UTF16_Encoding_Converter (!convert_for_bigendian),
00040                       0);
00041       break;
00042     case ACE_UTF_16LE:
00043       ACE_NEW_RETURN (converter,
00044                       ACE_UTF16_Encoding_Converter (convert_for_bigendian),
00045                       0);
00046       break;
00047     case ACE_UTF_8:
00048       ACE_NEW_RETURN (converter,
00049                       ACE_UTF8_Encoding_Converter,
00050                       0);
00051       break;
00052     default:
00053       // First check for ASCII since much of ASCII text will appear to
00054       // convert from UTF-16 to UTF-8.
00055       converter = ACE_UTF8_Encoding_Converter::encoded (source, source_size);
00056       if (converter != 0)
00057         return converter;
00058 
00059       // Check for UTF-32
00060       converter = ACE_UTF32_Encoding_Converter::encoded (source, source_size);
00061       if (converter != 0)
00062         return converter;
00063 
00064       // Check for UTF-16
00065       converter = ACE_UTF16_Encoding_Converter::encoded (source, source_size);
00066       if (converter != 0)
00067         return converter;
00068     }
00069 
00070   return converter;
00071 }
00072 
00073 ACE_END_VERSIONED_NAMESPACE_DECL
00074 #endif /* ACE_USES_WCHAR */

Generated on Tue Feb 2 17:18:39 2010 for ACE by  doxygen 1.4.7