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

Reply via email to