106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* Substitute variables and convert to RPN first */
tokens = [OFMutableArray array];
operators = [OFMutableArray array];
for (OFString *token in [condition
componentsSeparatedByString: @" "
options: OF_STRING_SKIP_EMPTY]) {
unsigned precedence;
of_unichar_t c;
if ([token isEqual: @"("]) {
[operators addObject: @"("];
continue;
}
if ([token isEqual: @")"]) {
|
|
|
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* Substitute variables and convert to RPN first */
tokens = [OFMutableArray array];
operators = [OFMutableArray array];
for (OFString *token in [condition
componentsSeparatedByString: @" "
options: OF_STRING_SKIP_EMPTY]) {
unsigned precedence;
OFUnichar c;
if ([token isEqual: @"("]) {
[operators addObject: @"("];
continue;
}
if ([token isEqual: @")"]) {
|
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
var = [OFNumber numberWithBool:
[first isEqual: second]];
else if ([token isEqual: @"!="])
var = [OFNumber numberWithBool:
![first isEqual: second]];
else if ([token isEqual: @"<"])
var = [OFNumber numberWithBool: [first
compare: second] == OF_ORDERED_ASCENDING];
else if ([token isEqual: @"<="])
var = [OFNumber numberWithBool: [first
compare: second] != OF_ORDERED_DESCENDING];
else if ([token isEqual: @">"])
var = [OFNumber numberWithBool: [first
compare: second] == OF_ORDERED_DESCENDING];
else if ([token isEqual: @">="])
var = [OFNumber numberWithBool: [first
compare: second] != OF_ORDERED_ASCENDING];
else if ([token isEqual: @"+"])
var = [OFNumber numberWithDouble:
[first doubleValue] + [second doubleValue]];
else if ([token isEqual: @"%"])
var = [OFNumber numberWithLongLong:
[first longLongValue] %
[second longLongValue]];
|
|
|
|
|
|
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
var = [OFNumber numberWithBool:
[first isEqual: second]];
else if ([token isEqual: @"!="])
var = [OFNumber numberWithBool:
![first isEqual: second]];
else if ([token isEqual: @"<"])
var = [OFNumber numberWithBool: [first
compare: second] == OFOrderedAscending];
else if ([token isEqual: @"<="])
var = [OFNumber numberWithBool: [first
compare: second] != OFOrderedDescending];
else if ([token isEqual: @">"])
var = [OFNumber numberWithBool: [first
compare: second] == OFOrderedDescending];
else if ([token isEqual: @">="])
var = [OFNumber numberWithBool: [first
compare: second] != OFOrderedAscending];
else if ([token isEqual: @"+"])
var = [OFNumber numberWithDouble:
[first doubleValue] + [second doubleValue]];
else if ([token isEqual: @"%"])
var = [OFNumber numberWithLongLong:
[first longLongValue] %
[second longLongValue]];
|