From 1ece8fe55681094b9caa2553267ad2178e3c7578 Mon Sep 17 00:00:00 2001 From: mccallum Date: Fri, 5 May 1995 18:29:12 +0000 Subject: [PATCH] (-compare:options:range:): Simple implementation; not complete. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@411 72102866-910b-0410-8b05-ffd578937521 --- Source/NSString.m | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/Source/NSString.m b/Source/NSString.m index 1105abb9c..4b7f5c3f7 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -368,8 +368,45 @@ options: (unsigned int)mask range: (NSRange)aRange { - [self notImplemented:_cmd]; - return 0; + /* xxx ignores NSAnchoredSearch in mask. Fix this. */ + /* xxx only handles C-string encoding */ + + int i, start, end, increment; + const char *s1 = [self _cStringContents]; + const char *s2 = [aString _cStringContents]; + + if (mask & NSBackwardsSearch) + { + start = aRange.location + aRange.length; + end = aRange.location; + increment = -1; + } + else + { + start = aRange.location; + end = aRange.location + aRange.length; + increment = 1; + } + + if (mask & NSCaseInsensitiveSearch) + { + for (i = start; i < end; i += increment) + { + int c1 = tolower(s1[i]); + int c2 = tolower(s2[i]); + if (c1 < c2) return NSOrderedAscending; + if (c1 > c2) return NSOrderedDescending; + } + } + else + { + for (i = start; i < end; i += increment) + { + if (s1[i] < s2[i]) return NSOrderedAscending; + if (s1[i] > s2[i]) return NSOrderedDescending; + } + } + return NSOrderedSame; } - (BOOL) hasPrefix: (NSString*)aString