UTF-16 encoding.
More...
#include <encodings.h>
|
template<typename OutputStream > |
static void | Encode (OutputStream &os, unsigned codepoint) |
|
template<typename OutputStream > |
static void | EncodeUnsafe (OutputStream &os, unsigned codepoint) |
|
template<typename InputStream > |
static bool | Decode (InputStream &is, unsigned *codepoint) |
|
template<typename InputStream , typename OutputStream > |
static bool | Validate (InputStream &is, OutputStream &os) |
|
template<typename CharType = wchar_t>
struct UTF16< CharType >
UTF-16 encoding.
http://en.wikipedia.org/wiki/UTF-16 http://tools.ietf.org/html/rfc2781
- Template Parameters
-
CharType | Type for storing 16-bit UTF-16 data. Default is wchar_t. C++11 may use char16_t instead. |
- Note
- implements Encoding concept
-
For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness. For streaming, use UTF16LE and UTF16BE, which handle endianness.
Definition at line 269 of file encodings.h.
template<typename CharType = wchar_t>
typedef CharType UTF16< CharType >::Ch |
template<typename CharType = wchar_t>
template<typename CharType = wchar_t>
template<typename InputStream >
static bool UTF16< CharType >::Decode |
( |
InputStream & |
is, |
|
|
unsigned * |
codepoint |
|
) |
| |
|
inlinestatic |
Definition at line 307 of file encodings.h.
309 typename InputStream::Ch
c = is.Take();
310 if (c < 0xD800 || c > 0xDFFF) {
311 *codepoint =
static_cast<unsigned>(
c);
314 else if (c <= 0xDBFF) {
315 *codepoint = (
static_cast<unsigned>(
c) & 0x3FF) << 10;
317 *codepoint |= (
static_cast<unsigned>(
c) & 0x3FF);
318 *codepoint += 0x10000;
319 return c >= 0xDC00 && c <= 0xDFFF;
RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >=2)
template<typename CharType = wchar_t>
template<typename OutputStream >
static void UTF16< CharType >::Encode |
( |
OutputStream & |
os, |
|
|
unsigned |
codepoint |
|
) |
| |
|
inlinestatic |
Definition at line 276 of file encodings.h.
278 if (codepoint <= 0xFFFF) {
280 os.Put(static_cast<typename OutputStream::Ch>(codepoint));
284 unsigned v = codepoint - 0x10000;
285 os.Put(static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
286 os.Put(static_cast<typename OutputStream::Ch>((v & 0x3FF) | 0xDC00));
RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >=2)
#define RAPIDJSON_ASSERT(x)
Assertion.
template<typename CharType = wchar_t>
template<typename OutputStream >
static void UTF16< CharType >::EncodeUnsafe |
( |
OutputStream & |
os, |
|
|
unsigned |
codepoint |
|
) |
| |
|
inlinestatic |
Definition at line 292 of file encodings.h.
294 if (codepoint <= 0xFFFF) {
296 PutUnsafe(os, static_cast<typename OutputStream::Ch>(codepoint));
300 unsigned v = codepoint - 0x10000;
301 PutUnsafe(os, static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
302 PutUnsafe(os, static_cast<typename OutputStream::Ch>((v & 0x3FF) | 0xDC00));
RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >=2)
#define RAPIDJSON_ASSERT(x)
Assertion.
void PutUnsafe(Stream &stream, typename Stream::Ch c)
Write character to a stream, presuming buffer is reserved.
template<typename CharType = wchar_t>
UTF16< CharType >::RAPIDJSON_STATIC_ASSERT |
( |
sizeof(Ch) >= |
2 | ) |
|
template<typename CharType = wchar_t>
template<typename InputStream , typename OutputStream >
static bool UTF16< CharType >::Validate |
( |
InputStream & |
is, |
|
|
OutputStream & |
os |
|
) |
| |
|
inlinestatic |
Definition at line 325 of file encodings.h.
328 typename InputStream::Ch
c;
329 os.Put(static_cast<typename OutputStream::Ch>(c = is.Take()));
330 if (c < 0xD800 || c > 0xDFFF)
332 else if (c <= 0xDBFF) {
333 os.Put(c = is.Take());
334 return c >= 0xDC00 && c <= 0xDFFF;
RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >=2)
The documentation for this struct was generated from the following file: