9 #ifndef DtUnicodeChar_H
10 #define DtUnicodeChar_H
53 inline explicit DtUnicodeChar(
const unsigned short s,
const unsigned short c)
58 throw std::invalid_argument(
"UTF-16 characters are not a surrogate pair.");
67 template <
int sizeof_
wchar_t>
97 codePoint != 0xfffe && codePoint != 0xffff);
106 start != substringStart &&
115 substringStart != end &&
134 if(!
isCodePointValid(character))
throw std::invalid_argument(
"Not a valid UTF 32 code point");
159 template <
int sizeofWChar_t>
177 CodePoint X = (hi & 0x3F) << 10 | (lo & 0x3FF);
181 return (U << 16) |
X;
189 | (
unsigned short)((cp >> 10) & 0x3F);
267 throw std::invalid_argument(
"Not a valid UTF8 string.");
271 inline unsigned int readUtf8(
const unsigned char* memory)
273 unsigned char c = *memory;
282 (*(memory + 1) & 0x3F);
288 ((*(memory + 1) & 0x3F) << 6) |
289 (*(memory + 2) & 0x3F);
295 ((*(memory + 1) & 0x3F) << 12) |
296 ((*(memory + 2) & 0x3F) << 6) |
297 (*(memory + 3) & 0x3F);
302 throw std::invalid_argument(
"Not a valid UTF8 string.");
315 *(memory+1) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
321 *(memory+1) = (
unsigned char)((
myCodePoint >> 6) & 0x3F) | 0x80;
322 *(memory+2) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
327 *(memory+1) = (
unsigned char)((
myCodePoint >> 12) & 0x3F) | 0x80;
328 *(memory+2) = (
unsigned char)((
myCodePoint >> 6 ) & 0x3F) | 0x80;
329 *(memory+3) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
333 template <
int sizeofW
chart>
337 inline void writeWChar(
wchar_t* memory)
const;
356 inline unsigned int DtUnicodeChar::wchartLength<2>()
const
358 return utf16CodeUnits() << 1;
362 inline unsigned int DtUnicodeChar::wchartLength<4>()
const
364 return utf32Length();
369 template <
int sizeof_
wchar_t>
380 throw std::invalid_argument(
"Invalid UTF-16 character");
386 inline void DtUnicodeChar::writeWCharT<2>(
wchar_t* memory)
const
388 writeUtf16(reinterpret_cast<Surrogate*>(memory));
392 inline void DtUnicodeChar::writeWCharT<4>(
wchar_t* memory)
const
394 writeUtf32(reinterpret_cast<unsigned int*>(memory));
399 return wchartLength<sizeof(wchar_t)>();
404 writeWCharT<sizeof(wchar_t)>(memory);
void writeWChar(wchar_t *memory) const
Definition: DtUnicodeChar.h:402
unsigned int wchartLength() const
static const Surrogate LeadSurrogateMin
Definition: DtUnicodeChar.h:89
void writeUtf16(Surrogate *memory) const
Definition: DtUnicodeChar.h:224
static const Surrogate TrailSurrogateMin
Definition: DtUnicodeChar.h:91
void readUtf32(const unsigned int *memory)
Definition: DtUnicodeChar.h:236
static void encodeSurrogatePair(CodePoint cp, Surrogate &hi, Surrogate &lo)
Definition: DtUnicodeChar.h:184
static bool isCodePointValid(CodePoint codePoint)
Definition: DtUnicodeChar.h:94
CodePoint myCodePoint
Definition: DtUnicodeChar.h:352
static unsigned int utf8Length(const unsigned char c)
Get the length based upon the first character.
Definition: DtUnicodeChar.h:247
unsigned char Octet
A Unicode Octet is 8bit byte used in UTF-8 encoding.
Definition: DtUnicodeChar.h:28
static const CodePoint CodePointMax
Definition: DtUnicodeChar.h:88
unsigned int utf16CodeUnits() const
Definition: DtUnicodeChar.h:194
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:53
unsigned int utf16Length() const
Definition: DtUnicodeChar.h:164
DtUnicodeChar(const char c)
Construct a unicode character for a character c. C is assumed to be either ASCII or Latin-1...
Definition: DtUnicodeChar.h:37
unsigned int wideStringLength() const
Definition: DtUnicodeChar.h:397
DtUnicodeChar(unsigned int utf32c)
Definition: DtUnicodeChar.h:346
unsigned int readUtf8(const unsigned char *memory)
Definition: DtUnicodeChar.h:271
A single unicode character.
Definition: DtUnicodeChar.h:17
bool operator==(const DtUnicodeChar &other) const
Definition: DtUnicodeChar.h:77
void writeUtf8(char *memory) const
Definition: DtUnicodeChar.h:306
DtUnicodeChar(const wchar_t c)
Construct a unicode character for a character c. C is assumed to be either UTF-16 or UTF-32 depending...
Definition: DtUnicodeChar.h:46
bool operator!=(const DtUnicodeChar &other) const
Definition: DtUnicodeChar.h:82
static DtUnicodeChar fromUtf32(unsigned int character)
Definition: DtUnicodeChar.h:132
unsigned int utf8Length() const
Calculate the utf-8 length of a code point.
Definition: DtUnicodeChar.h:139
void writeWCharT(wchar_t *memory) const
DtUnicodeChar()
Definition: DtUnicodeChar.h:30
DtUnicodeChar(const DtUnicodeChar &other)
Definition: DtUnicodeChar.h:62
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:208
DtUnicodeChar & operator=(const DtUnicodeChar &other)
Definition: DtUnicodeChar.h:70
unsigned short Surrogate
Definition: DtUnicodeChar.h:25
unsigned int CodePoint
Definition: DtUnicodeChar.h:22
static const Surrogate LeadSurrogateMax
Definition: DtUnicodeChar.h:90
static bool isSurrogateSubstringValid(const Surrogate *start, const Surrogate *end, const Surrogate *substringStart, const Surrogate *substringEnd)
Definition: DtUnicodeChar.h:100
CodePoint codePoint() const
Definition: DtUnicodeChar.h:339
static const Surrogate TrailSurrogateMax
Definition: DtUnicodeChar.h:92
void writeUtf32(unsigned int *memory) const
Definition: DtUnicodeChar.h:241
#define X(a)
Definition: DtSharedSimulationSettings.h:51
static CodePoint widechar(const wchar_t c)
Definition: DtUnicodeChar.h:370
unsigned int utf32Length() const
Definition: DtUnicodeChar.h:169
static bool isSurrogate(Surrogate cp)
Definition: DtUnicodeChar.h:126
static CodePoint decodeSurrogatePair(Surrogate hi, Surrogate lo)
Definition: DtUnicodeChar.h:174