00001
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 convert_for_bigendian = true;
00020 #else
00021 bool convert_for_bigendian = false;
00022 #endif
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
00054
00055 converter = ACE_UTF8_Encoding_Converter::encoded (source, source_size);
00056 if (converter != 0)
00057 return converter;
00058
00059
00060 converter = ACE_UTF32_Encoding_Converter::encoded (source, source_size);
00061 if (converter != 0)
00062 return converter;
00063
00064
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