00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ACE_UTF16_ENCODING_CONVERTER_H
00017 #define ACE_UTF16_ENCODING_CONVERTER_H
00018
00019 #include "ace/pre.h"
00020
00021 #include "ace/Encoding_Converter.h"
00022
00023 #if defined (ACE_USES_WCHAR)
00024 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00025
00026
00027
00028
00029 class ACE_UTF16_Encoding_Converter: public ACE_Encoding_Converter
00030 {
00031 public:
00032
00033
00034 ACE_UTF16_Encoding_Converter (bool swap = false);
00035
00036
00037 virtual ~ACE_UTF16_Encoding_Converter (void);
00038
00039
00040
00041 virtual Result to_utf8 (const void* source,
00042 size_t source_size,
00043 ACE_Byte* target,
00044 size_t target_size,
00045 bool strict = true);
00046
00047
00048
00049 virtual Result from_utf8 (const ACE_Byte* source,
00050 size_t source_size,
00051 void* target,
00052 size_t target_size,
00053 bool strict = true);
00054
00055
00056
00057
00058 static ACE_UTF16_Encoding_Converter* encoded (const ACE_Byte* source,
00059 size_t source_size);
00060
00061 protected:
00062
00063 bool is_legal_utf8 (const ACE_Byte* source,
00064 size_t length) const;
00065
00066 static ACE_UINT32 get_UNI_SUR_HIGH_START (void);
00067 static ACE_UINT32 get_UNI_SUR_LOW_END (void);
00068 static ACE_UINT32 get_UNI_REPLACEMENT_CHAR (void);
00069 static const ACE_Byte* get_first_byte_mark (void);
00070 static const ACE_Byte* get_trailing_bytes_for_utf8 (void);
00071 static const ACE_UINT32* get_offsets_from_utf8 (void);
00072
00073 bool swap_;
00074 };
00075
00076 ACE_END_VERSIONED_NAMESPACE_DECL
00077
00078 #if defined (__ACE_INLINE__)
00079 #include "ace/UTF16_Encoding_Converter.inl"
00080 #endif
00081
00082 #endif
00083
00084 #include "ace/post.h"
00085
00086 #endif