#include <Charset.h>
Definition at line 106 of file Charset.h.
◆ CharsetDecoder()
CharsetDecoder::CharsetDecoder |
( |
| ) |
|
|
protected |
◆ decode() [1/3]
int CharsetDecoder::decode |
( |
const byte_t * | _in, |
|
|
size_t & | _inCount, |
|
|
wchar_t * | _out, |
|
|
size_t & | _outCount ) |
|
virtual |
Definition at line 50 of file CharsetDecoder.cpp.
56{
58
59 wchar_t* dst = _out;
60 wchar_t* dstend = dst + _outCount;
61
63 const byte_t* srcend = src + _inCount;
64 size_t srclen;
65
66 int _mbslen = 0;
67 while((srclen = srcend - src) > 0 && dst < dstend) {
70
71 if (_mbslen <= 0)
72 break;
73
74#if __SIZEOF_WCHAR_T__ == 2
75 if (uc > 0xFFFF || (0xD800 <= uc && uc < 0xE000)) {
77 break;
78 }
79#endif
80 *dst = (wchar_t)uc;
81
82 src += (size_t)_mbslen;
83 dst++;
84 }
85
86 _inCount = src - _in;
87 _outCount = dst - _out;
88
89 if (_mbslen >= 0)
91
92 switch (_mbslen) {
97 }
99}
__DCL_BEGIN_NAMESPACE typedef uint32_t ucs4_t
#define __DCL_ASSERT(expr)
virtual int toWideChar(const byte_t *_mbs, size_t _mbslen, ucs4_t *_uc)=0
◆ decode() [2/3]
String CharsetDecoder::decode |
( |
const ByteString & | _str | ) |
|
Definition at line 162 of file CharsetDecoder.cpp.
164{
165 return decode(_str, _str.length());
166}
virtual int decode(const byte_t *_in, size_t &_inCount, wchar_t *_out, size_t &_outCount)
◆ decode() [3/3]
String CharsetDecoder::decode |
( |
const char * | _mbs, |
|
|
size_t | _mbslen = (size_t)-1 ) |
Definition at line 128 of file CharsetDecoder.cpp.
130{
132 if (_mbslen == (size_t) -1)
133 _mbslen = ByteString::length(_mbs);
134
135 String rstr;
136 if (_mbslen) {
138 size_t _inCount = _mbslen;
139#if 0
141#else
142 size_t _outCount = _mbslen;
143#endif
144
145 CharBuffer*
buf = CharBuffer::create(_outCount);
146 int rn =
decode(_in, _inCount,
buf->data(), _outCount);
150 throw new CharsetConvertException(rn);
151 }
152 buf->data()[_outCount] = L
'\0';
153 buf->__dataLength = _outCount;
154 CharBuffer::shrink(
buf);
155
158 }
159 return rstr;
160}
size_t getDecodedLength(const char *_mbs, size_t _mbslen) __DCL_THROWS1(CharsetConvertException *)
◆ getDecodedLength()
size_t CharsetDecoder::getDecodedLength |
( |
const char * | _mbs, |
|
|
size_t | _mbslen ) |
Definition at line 101 of file CharsetDecoder.cpp.
103{
105 size_t inTotal = _mbslen;
106 size_t outTotal = 0;
108
109 for ( ; ; ) {
110 size_t _inCount = inTotal;
112 int r =
decode(_in, _inCount,
buf, _outCount);
113 outTotal += _outCount;
115 inTotal -= _inCount;
116 if (inTotal == 0)
117 break;
118
119 }
120 else {
121 throw(
new CharsetConvertException(
r));
122 }
123 _in += _inCount;
124 }
125 return outTotal;
126}
#define __countof(array, type)
◆ toWideChar()
virtual int CharsetDecoder::toWideChar |
( |
const byte_t * | _mbs, |
|
|
size_t | _mbslen, |
|
|
ucs4_t * | _uc ) |
|
protectedpure virtual |
The documentation for this class was generated from the following files: