12 #ifndef DtUnicodeChar_H
13 #define DtUnicodeChar_H
56 inline explicit DtUnicodeChar(
const unsigned short s,
const unsigned short c)
61 throw std::invalid_argument(
"UTF-16 characters are not a surrogate pair.");
70 template <
int sizeof_
wchar_t>
100 codePoint != 0xfffe && codePoint != 0xffff);
109 start != substringStart &&
118 substringStart != end &&
137 if(!
isCodePointValid(character))
throw std::invalid_argument(
"Not a valid UTF 32 code point");
162 template <
int sizeofWChar_t>
180 CodePoint X = (hi & 0x3F) << 10 | (lo & 0x3FF);
184 return (U << 16) |
X;
192 | (
unsigned short)((cp >> 10) & 0x3F);
270 throw std::invalid_argument(
"Not a valid UTF8 string.");
274 inline unsigned int readUtf8(
const unsigned char* memory)
276 unsigned char c = *memory;
285 (*(memory + 1) & 0x3F);
291 ((*(memory + 1) & 0x3F) << 6) |
292 (*(memory + 2) & 0x3F);
298 ((*(memory + 1) & 0x3F) << 12) |
299 ((*(memory + 2) & 0x3F) << 6) |
300 (*(memory + 3) & 0x3F);
305 throw std::invalid_argument(
"Not a valid UTF8 string.");
318 *(memory+1) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
324 *(memory+1) = (
unsigned char)((
myCodePoint >> 6) & 0x3F) | 0x80;
325 *(memory+2) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
330 *(memory+1) = (
unsigned char)((
myCodePoint >> 12) & 0x3F) | 0x80;
331 *(memory+2) = (
unsigned char)((
myCodePoint >> 6 ) & 0x3F) | 0x80;
332 *(memory+3) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
336 template <
int sizeofW
chart>
340 inline void writeWChar(
wchar_t* memory)
const;
359 inline unsigned int DtUnicodeChar::wchartLength<2>()
const
361 return utf16CodeUnits() << 1;
365 inline unsigned int DtUnicodeChar::wchartLength<4>()
const
367 return utf32Length();
372 template <
int sizeof_
wchar_t>
383 throw std::invalid_argument(
"Invalid UTF-16 character");
389 inline void DtUnicodeChar::writeWCharT<2>(
wchar_t* memory)
const
391 writeUtf16(reinterpret_cast<Surrogate*>(memory));
395 inline void DtUnicodeChar::writeWCharT<4>(
wchar_t* memory)
const
397 writeUtf32(reinterpret_cast<unsigned int*>(memory));
402 return wchartLength<sizeof(wchar_t)>();
407 writeWCharT<sizeof(wchar_t)>(memory);
void writeWChar(wchar_t *memory) const
Definition: DtUnicodeChar.h:405
unsigned int wchartLength() const
static const Surrogate LeadSurrogateMin
Definition: DtUnicodeChar.h:92
void writeUtf16(Surrogate *memory) const
Definition: DtUnicodeChar.h:227
static const Surrogate TrailSurrogateMin
Definition: DtUnicodeChar.h:94
void readUtf32(const unsigned int *memory)
Definition: DtUnicodeChar.h:239
static void encodeSurrogatePair(CodePoint cp, Surrogate &hi, Surrogate &lo)
Definition: DtUnicodeChar.h:187
static bool isCodePointValid(CodePoint codePoint)
Definition: DtUnicodeChar.h:97
CodePoint myCodePoint
Definition: DtUnicodeChar.h:355
static unsigned int utf8Length(const unsigned char c)
Get the length based upon the first character.
Definition: DtUnicodeChar.h:250
unsigned char Octet
A Unicode Octet is 8bit byte used in UTF-8 encoding.
Definition: DtUnicodeChar.h:31
static const CodePoint CodePointMax
Definition: DtUnicodeChar.h:91
unsigned int utf16CodeUnits() const
Definition: DtUnicodeChar.h:197
DtUnicodeChar(const unsigned short s, const unsigned short c)
Construct a pair of UTF-16 code units, where the first character must be a surrogate pair...
Definition: DtUnicodeChar.h:56
unsigned int utf16Length() const
Definition: DtUnicodeChar.h:167
DtUnicodeChar(const char c)
Construct a unicode character for a character c.
Definition: DtUnicodeChar.h:40
unsigned int wideStringLength() const
Definition: DtUnicodeChar.h:400
DtUnicodeChar(unsigned int utf32c)
Definition: DtUnicodeChar.h:349
unsigned int readUtf8(const unsigned char *memory)
Definition: DtUnicodeChar.h:274
A single unicode character.
Definition: DtUnicodeChar.h:20
bool operator==(const DtUnicodeChar &other) const
Definition: DtUnicodeChar.h:80
void writeUtf8(char *memory) const
Definition: DtUnicodeChar.h:309
DtUnicodeChar(const wchar_t c)
Construct a unicode character for a character c.
Definition: DtUnicodeChar.h:49
bool operator!=(const DtUnicodeChar &other) const
Definition: DtUnicodeChar.h:85
static DtUnicodeChar fromUtf32(unsigned int character)
Definition: DtUnicodeChar.h:135
unsigned int utf8Length() const
Calculate the utf-8 length of a code point.
Definition: DtUnicodeChar.h:142
void writeWCharT(wchar_t *memory) const
DtUnicodeChar()
Definition: DtUnicodeChar.h:33
DtUnicodeChar(const DtUnicodeChar &other)
Definition: DtUnicodeChar.h:65
unsigned int readUtf16(const Surrogate *memory)
Read from UTF-16 encoded memory, Returns number of code units read, NOT number of bytes...
Definition: DtUnicodeChar.h:211
DtUnicodeChar & operator=(const DtUnicodeChar &other)
Definition: DtUnicodeChar.h:73
unsigned short Surrogate
Definition: DtUnicodeChar.h:28
unsigned int CodePoint
Definition: DtUnicodeChar.h:25
static const Surrogate LeadSurrogateMax
Definition: DtUnicodeChar.h:93
static bool isSurrogateSubstringValid(const Surrogate *start, const Surrogate *end, const Surrogate *substringStart, const Surrogate *substringEnd)
Definition: DtUnicodeChar.h:103
CodePoint codePoint() const
Definition: DtUnicodeChar.h:342
static const Surrogate TrailSurrogateMax
Definition: DtUnicodeChar.h:95
void writeUtf32(unsigned int *memory) const
Definition: DtUnicodeChar.h:244
#define X(a)
Definition: DtSharedSimulationSettings.h:46
static CodePoint widechar(const wchar_t c)
Definition: DtUnicodeChar.h:373
unsigned int utf32Length() const
Definition: DtUnicodeChar.h:172
static bool isSurrogate(Surrogate cp)
Definition: DtUnicodeChar.h:129
static CodePoint decodeSurrogatePair(Surrogate hi, Surrogate lo)
Definition: DtUnicodeChar.h:177