attempt fiox for bug #47619

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@39776 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2016-05-18 13:11:45 +00:00
parent ce7a6ed62f
commit 544a43092e
2 changed files with 55 additions and 40 deletions

View file

@ -1,3 +1,7 @@
2016-05-18 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSPredicate.m: attempt fix for bug #47619
2016-05-18 Eric Heintzmann <heintzmann.eric@free.fr>
* ChangeLog.2:

View file

@ -1523,7 +1523,7 @@ GSICUStringMatchesRegex(NSString *string, NSString *regex, NSStringCompareOption
}
// apply method selector
return [self performSelector: _selector
withObject: eargs];
withObject: eargs];
}
- (void) dealloc;
@ -1543,6 +1543,20 @@ GSICUStringMatchesRegex(NSString *string, NSString *regex, NSStringCompareOption
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 @@ GSICUStringMatchesRegex(NSString *string, NSString *regex, NSStringCompareOption
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,42 +1652,47 @@ GSICUStringMatchesRegex(NSString *string, NSString *regex, NSStringCompareOption
- (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++)
while (nil != (o = [e nextObject]))
{
sum += [[expressions objectAtIndex: i] doubleValue];
sum += [o doubleValue];
count++;
}
return [NSNumber numberWithDouble: sum / _argc];
return [NSNumber numberWithDouble: sum / count];
}
- (id) _eval_sum: (NSArray *)expressions
- (id) _eval_max: (NSArray *)expressions
{
unsigned int i;
double sum = 0.0;
for (i = 0; i < _argc; i++)
NSEnumerator *e = [self _enum: expressions];
id o = [e nextObject];
double max = (nil == o) ? 0.0 : [o doubleValue];
double cur;
while (nil != (o = [e nextObject]))
{
sum += [[expressions objectAtIndex: i] doubleValue];
cur = [o doubleValue];
if (max < cur)
{
max = cur;
}
}
return [NSNumber numberWithDouble: sum];
return [NSNumber numberWithDouble: max];
}
- (id) _eval_min: (NSArray *)expressions
{
unsigned int i;
double min = 0.0;
double cur;
if (_argc > 0)
{
min = [[expressions objectAtIndex: 0] doubleValue];
}
NSEnumerator *e = [self _enum: expressions];
id o = [e nextObject];
double min = (nil == o ? 0.0 : [o doubleValue]);
double cur;
for (i = 1; i < _argc; i++)
while (nil != (o = [e nextObject]))
{
cur = [[expressions objectAtIndex: i] doubleValue];
cur = [o doubleValue];
if (min > cur)
{
min = cur;
@ -1681,26 +1701,17 @@ GSICUStringMatchesRegex(NSString *string, NSString *regex, NSStringCompareOption
return [NSNumber numberWithDouble: min];
}
- (id) _eval_max: (NSArray *)expressions
- (id) _eval_sum: (NSArray *)expressions
{
unsigned int i;
double max = 0.0;
double cur;
if (_argc > 0)
{
max = [[expressions objectAtIndex: 0] doubleValue];
}
NSEnumerator *e = [self _enum: expressions];
double sum = 0.0;
id o;
for (i = 1; i < _argc; i++)
while (nil != (o = [e nextObject]))
{
cur = [[expressions objectAtIndex: i] doubleValue];
if (max < cur)
{
max = cur;
}
sum += [o doubleValue];
}
return [NSNumber numberWithDouble: max];
return [NSNumber numberWithDouble: sum];
}
// add arithmetic functions: average, median, mode, stddev, sqrt, log, ln, exp, floor, ceiling, abs, trunc, random, randomn, now