From 2c0ee96dfe10b1077577962fa8fb790a51b3068b Mon Sep 17 00:00:00 2001 From: rfm Date: Thu, 22 Jun 2006 22:36:46 +0000 Subject: [PATCH] Minor optimisation for utf-8 string initialisation git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@23098 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/GSString.m | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 23838ed7f..4ce1c32c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-06-22 Richard Frith-Macdonald + + * Source/GSString.m: small optimisation for initialisation with + unicode data which happens to be just ascii. + 2006-06-20 Richard Frith-Macdonald * Source/GSHTTPDigest.m: deleted diff --git a/Source/GSString.m b/Source/GSString.m index d70d9b30b..bf76300d6 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -506,7 +506,27 @@ fixBOM(unsigned char **bytes, unsigned *length, BOOL *shouldFree, } } - if (encoding != internalEncoding && GSIsByteEncoding(encoding) == YES) + if (encoding == NSUTF8StringEncoding) + { + unsigned i; + + for (i = 0; i < length; i++) + { + if ((chars.c)[i] > 127) + { + break; + } + } + if (i == length) + { + /* + * This is actually ASCII data ... so we can just store it as if + * in the internal 8bit encoding scheme. + */ + encoding = internalEncoding; + } + } + else if (encoding != internalEncoding && GSIsByteEncoding(encoding) == YES) { unsigned i; @@ -3653,7 +3673,27 @@ NSAssert(_flags.free == 1 && _zone != 0, NSInternalInconsistencyException); chars = (unsigned char*)bytes; } - if (encoding != internalEncoding && GSIsByteEncoding(encoding) == YES) + if (encoding == NSUTF8StringEncoding) + { + unsigned i; + + for (i = 0; i < length; i++) + { + if (chars[i] > 127) + { + break; + } + } + if (i == length) + { + /* + * This is actually ASCII data ... so we can just store it as if + * in the internal 8bit encoding scheme. + */ + encoding = internalEncoding; + } + } + else if (encoding != internalEncoding && GSIsByteEncoding(encoding) == YES) { unsigned i;