Author: rfm
Date: Wed May 18 15:11:45 2016
New Revision: 39776
URL: http://svn.gna.org/viewcvs/gnustep?rev=39776&view=rev
Log:
attempt fiox for bug #47619
Modified:
libs/base/trunk/ChangeLog
libs/base/trunk/Source/NSPredicate.m
Modified: libs/base/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39776&r1=39775&r2=39776&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog (original)
+++ libs/base/trunk/ChangeLog Wed May 18 15:11:45 2016
@@ -1,3 +1,7 @@
+2016-05-18 Richard Frith-Macdonald <[email protected]>
+
+ * Source/NSPredicate.m: attempt fix for bug #47619
+
2016-05-18 Eric Heintzmann <[email protected]>
* ChangeLog.2:
Modified: libs/base/trunk/Source/NSPredicate.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSPredicate.m?rev=39776&r1=39775&r2=39776&view=diff
==============================================================================
--- libs/base/trunk/Source/NSPredicate.m (original)
+++ libs/base/trunk/Source/NSPredicate.m Wed May 18 15:11:45 2016
@@ -1523,7 +1523,7 @@
}
// apply method selector
return [self performSelector: _selector
- withObject: eargs];
+ withObject: eargs];
}
- (void) dealloc;
@@ -1543,6 +1543,20 @@
return copy;
}
+- (NSEnumerator*) _enum: (NSArray *)expressions
+{
+ id o;
+
+ /* Check to see if this is aggregating over a collection.
+ */
+ if (1 == _argc && [(o = [expressions lastObject])
+ respondsToSelector: @selector(objectEnumerator)])
+ {
+ return [o objectEnumerator];
+ }
+ return [expressions objectEnumerator];
+}
+
- (id) _expressionWithSubstitutionVariables: (NSDictionary *)variables
{
NSMutableArray *args = [NSMutableArray arrayWithCapacity: _argc];
@@ -1593,7 +1607,8 @@
id left = [expressions objectAtIndex: 0];
id right = [expressions objectAtIndex: 1];
- return [NSNumber numberWithDouble: pow([left doubleValue], [right
doubleValue])];
+ return [NSNumber numberWithDouble:
+ pow([left doubleValue], [right doubleValue])];
}
- (id) _eval__mul: (NSArray *)expressions
@@ -1637,70 +1652,66 @@
- (id) _eval_avg: (NSArray *)expressions
{
- unsigned int i;
- double sum = 0.0;
+ NSEnumerator *e = [self _enum: expressions];
+ double sum = 0.0;
+ unsigned count = 0;
+ id o;
- for (i = 0; i < _argc; i++)
- {
- sum += [[expressions objectAtIndex: i] doubleValue];
- }
- return [NSNumber numberWithDouble: sum / _argc];
+ while (nil != (o = [e nextObject]))
+ {
+ sum += [o doubleValue];
+ count++;
+ }
+ return [NSNumber numberWithDouble: sum / count];
+}
+
+- (id) _eval_max: (NSArray *)expressions
+{
+ NSEnumerator *e = [self _enum: expressions];
+ id o = [e nextObject];
+ double max = (nil == o) ? 0.0 : [o doubleValue];
+ double cur;
+
+ while (nil != (o = [e nextObject]))
+ {
+ cur = [o doubleValue];
+ if (max < cur)
+ {
+ max = cur;
+ }
+ }
+ return [NSNumber numberWithDouble: max];
+}
+
+- (id) _eval_min: (NSArray *)expressions
+{
+ NSEnumerator *e = [self _enum: expressions];
+ id o = [e nextObject];
+ double min = (nil == o ? 0.0 : [o doubleValue]);
+ double cur;
+
+ while (nil != (o = [e nextObject]))
+ {
+ cur = [o doubleValue];
+ if (min > cur)
+ {
+ min = cur;
+ }
+ }
+ return [NSNumber numberWithDouble: min];
}
- (id) _eval_sum: (NSArray *)expressions
{
- unsigned int i;
- double sum = 0.0;
-
- for (i = 0; i < _argc; i++)
- {
- sum += [[expressions objectAtIndex: i] doubleValue];
+ NSEnumerator *e = [self _enum: expressions];
+ double sum = 0.0;
+ id o;
+
+ while (nil != (o = [e nextObject]))
+ {
+ sum += [o doubleValue];
}
return [NSNumber numberWithDouble: sum];
-}
-
-- (id) _eval_min: (NSArray *)expressions
-{
- unsigned int i;
- double min = 0.0;
- double cur;
-
- if (_argc > 0)
- {
- min = [[expressions objectAtIndex: 0] doubleValue];
- }
-
- for (i = 1; i < _argc; i++)
- {
- cur = [[expressions objectAtIndex: i] doubleValue];
- if (min > cur)
- {
- min = cur;
- }
- }
- return [NSNumber numberWithDouble: min];
-}
-
-- (id) _eval_max: (NSArray *)expressions
-{
- unsigned int i;
- double max = 0.0;
- double cur;
-
- if (_argc > 0)
- {
- max = [[expressions objectAtIndex: 0] doubleValue];
- }
-
- for (i = 1; i < _argc; i++)
- {
- cur = [[expressions objectAtIndex: i] doubleValue];
- if (max < cur)
- {
- max = cur;
- }
- }
- return [NSNumber numberWithDouble: max];
}
// add arithmetic functions: average, median, mode, stddev, sqrt, log, ln,
exp, floor, ceiling, abs, trunc, random, randomn, now
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs