Author: thebeing
Date: Fri Jun 17 09:43:51 2016
New Revision: 39871
URL: http://svn.gna.org/viewcvs/gnustep?rev=39871&view=rev
Log:
Implement -isEqual: and -hash on NSRegularExpression, so that copies are
actually equal
Added:
libs/base/trunk/Tests/base/NSRegularExpression/
libs/base/trunk/Tests/base/NSRegularExpression/TestInfo
libs/base/trunk/Tests/base/NSRegularExpression/basic.m
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/NSRegularExpression.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39871&r1=39870&r2=39871&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Fri Jun 17 09:43:51 2016
@@ -1,3 +1,8 @@
+2016-06-17 Niels Grewe <[email protected]>
+
+ * Source/NSRegularExpression.m: Implement -isEqual: and -hash
+ * Tests/base/NSRegularExpression/basic.m: Test NSCopying
+
2016-06-14 Richard Frith-Macdonald <[email protected]>
* Source/GSSocketStream.m: Fix for failure of connect() call.
Modified: libs/base/trunk/Source/NSRegularExpression.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSRegularExpression.m?rev=39871&r1=39870&r2=39871&view=diff
==============================================================================
--- libs/base/trunk/Source/NSRegularExpression.m (original)
+++ libs/base/trunk/Source/NSRegularExpression.m Fri Jun 17 09:43:51 2016
@@ -133,6 +133,42 @@
return self;
}
+- (BOOL) isEqual: (id)obj
+{
+ if ([obj isKindOfClass: [NSRegularExpression class]])
+ {
+ if (self == obj)
+ {
+ return YES;
+ }
+ else if (options != ((NSRegularExpression*)obj)->options)
+ {
+ return NO;
+ }
+ else
+ {
+ UErrorCode myErr = 0;
+ UErrorCode theirErr = 0;
+ const UText *myText = uregex_patternUText(regex, &myErr);
+ const UText *theirText =
+ uregex_patternUText(((NSRegularExpression*)obj)->regex, &theirErr);
+ if (U_FAILURE(myErr) != U_FAILURE(theirErr))
+ {
+ return NO;
+ }
+ else if (U_FAILURE(myErr) && U_FAILURE(theirErr))
+ {
+ return YES;
+ }
+ return utext_equals(myText, theirText);
+ }
+ }
+ else
+ {
+ return [super isEqual: obj];
+ }
+}
+
- (NSString*) pattern
{
UErrorCode s = 0;
@@ -178,12 +214,58 @@
return self;
}
+- (BOOL) isEqual: (id)obj
+{
+ if ([obj isKindOfClass: [NSRegularExpression class]])
+ {
+ if (self == obj)
+ {
+ return YES;
+ }
+ else if (options != ((NSRegularExpression*)obj)->options)
+ {
+ return NO;
+ }
+ else
+ {
+ UErrorCode myErr = 0;
+ UErrorCode theirErr = 0;
+ int32_t myLen = 0;
+ int32_t theirLen = 0;
+ const UChar *myText = uregex_pattern(regex, &myLen, &myErr);
+ const UChar *theirText = uregex_pattern(
+ ((NSRegularExpression*)obj)->regex,
+ &theirLen, &theirErr);
+ if (U_FAILURE(myErr) != U_FAILURE(theirErr))
+ {
+ return NO;
+ }
+ else if (U_FAILURE(myErr) && U_FAILURE(theirErr))
+ {
+ return YES;
+ }
+ if (myLen != theirLen)
+ {
+ return NO;
+ }
+ return
+ (0 == memcmp((const void*)myText, (const void*)theirText, myLen));
+ }
+ }
+ else
+ {
+ return [super isEqual: obj];
+ }
+}
+
+
+
- (NSString*) pattern
{
UErrorCode s = 0;
int32_t length;
const unichar *pattern = uregex_pattern(regex, &length, &s);
-
+
if (U_FAILURE(s))
{
return nil;
@@ -191,6 +273,11 @@
return [NSString stringWithCharacters: pattern length: length];
}
#endif
+
+- (NSUInteger) hash
+{
+ return [[self pattern] hash] ^ options;
+}
static UBool
callback(const void *context, int32_t steps)
Added: libs/base/trunk/Tests/base/NSRegularExpression/TestInfo
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSRegularExpression/TestInfo?rev=39871&view=auto
==============================================================================
(empty)
Added: libs/base/trunk/Tests/base/NSRegularExpression/basic.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSRegularExpression/basic.m?rev=39871&view=auto
==============================================================================
--- libs/base/trunk/Tests/base/NSRegularExpression/basic.m (added)
+++ libs/base/trunk/Tests/base/NSRegularExpression/basic.m Fri Jun 17
09:43:51 2016
@@ -0,0 +1,22 @@
+#import "ObjectTesting.h"
+#import <Foundation/NSAutoreleasePool.h>
+#import <Foundation/NSRegularExpression.h>
+
+int main()
+{
+ NSAutoreleasePool *arp = [NSAutoreleasePool new];
+ id testObj = [[NSRegularExpression alloc] initWithPattern: @"^a"
+ options: 0
+ error: NULL];
+
+ test_NSObject(@"NSRegularExpression",
+ [NSArray arrayWithObject:
+ [[NSRegularExpression alloc] initWithPattern: @"^a"
+ options: 0
+ error: NULL]]);
+ test_NSCopying(@"NSRegularExpression",@"NSRegularExpression",
+ [NSArray arrayWithObject:testObj],NO,NO);
+
+ [arp release]; arp = nil;
+ return 0;
+}
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs