Skip to content

Commit

Permalink
#11107 Improve performance of length on a UTF16String
Browse files Browse the repository at this point in the history
  • Loading branch information
ScottPJones committed May 2, 2015
1 parent 0dad086 commit 63be5dc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 20 deletions.
28 changes: 14 additions & 14 deletions src/support/utf8.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,11 @@ size_t u8_offset(const char *s, size_t charnum)

/**
* @brief Calculates number of characters in a UTF-8 string
*
* @param[in] iStr UTF-8 encoded string
* @param[in] iLen Length of the string in bytes
*
* @return number of logical characters
* @param[in] s UTF-8 encoded string
* @param[in] offset Length of the string (or substring) in bytes
*
* @return Number of logical characters (or codepoints)
*/
size_t u8_charnum(const char *s, size_t offset)
{
Expand All @@ -256,23 +256,23 @@ size_t u8_charnum(const char *s, size_t offset)

/**
* @brief Calculates number of characters in a UTF-16 string
*
*
* @param[in] iStr UTF-16 encoded string
* @param[in] iLen Length of the string in 16-bit words
*
* @return number of logical characters
* @return number of logical characters (or codepoints)
*/
DLLEXPORT size_t u16_charnum(const uint16_t *iStr, size_t iLen)
{
size_t logChar = 0; // # of logical characters
size_t logChar = 0; // # of logical characters
if (iLen) {
do {
// Simply don't count trailing surrogate characters
// Since we are not doing validation anyway, we can just
// assume this is a valid UTF-16 string
logChar += !is_surrogate_trail(*iStr);
iStr++;
} while (--iLen);
do {
// Simply don't count trailing surrogate characters
// Since we are not doing validation anyway, we can just
// assume this is a valid UTF-16 string
logChar += !is_surrogate_trail(*iStr);
iStr++;
} while (--iLen);
}
return logChar;
}
Expand Down
12 changes: 6 additions & 6 deletions src/support/utf8.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,21 @@ DLLEXPORT size_t u8_offset(const char *str, size_t charnum);

/**
* @brief Calculates number of characters in UTF-8 encoded string
*
* @param[in] iStr UTF-8 encoded string
*
* @param[in] iStr UTF-8 encoded string (or substring)
* @param[in] iLen Length of string (or substring) in bytes
*
* @return Number of logical characters in string (or substring)
* @return Number of logical characters (or codepoints) in string (or substring)
*/
DLLEXPORT size_t u8_charnum(const char *iStr, size_t iOffset);
DLLEXPORT size_t u8_charnum(const char *iStr, size_t iLen);

/**
* @brief Calculates number of characters in UTF-16 encoded string
*
*
* @param[in] iStr UTF-16 encoded string
* @param[in] iLen Length of the string (or substring) in 16-bit words
*
* @return Number of logical characters in string (or substring)
* @return Number of logical characters (or codepoints) in string (or substring)
*/
DLLEXPORT size_t u16_charnum(const uint16_t *iStr, size_t iLen);

Expand Down

0 comments on commit 63be5dc

Please sign in to comment.