2
Copyright (C) 2000-2005 SKYRIX Software AG
4
This file is part of SOPE.
6
SOPE is free software; you can redistribute it and/or modify it under
7
the terms of the GNU Lesser General Public License as published by the
8
Free Software Foundation; either version 2, or (at your option) any
11
SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12
WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14
License for more details.
16
You should have received a copy of the GNU Lesser General Public
17
License along with SOPE; see the file COPYING. If not, write to the
18
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22
#include "EOQualifier.h"
26
static EONull *null = nil;
30
@interface NSObject(CompareIFace)
31
- (NSComparisonResult)compare:(id)_object;
34
@implementation NSObject(ImplementedQualifierComparisons)
36
- (BOOL)isEqualTo:(id)_object {
37
return [self isEqual:_object];
39
- (BOOL)isNotEqualTo:(id)_object {
40
return ![self isEqualTo:_object];
43
- (BOOL)isLessThan:(id)_object {
44
return [self compare:_object] < 0 ? YES : NO;
46
- (BOOL)isGreaterThan:(id)_object {
47
return [self compare:_object] > 0 ? YES : NO;
49
- (BOOL)isLessThanOrEqualTo:(id)_object {
50
return [self compare:_object] <= 0 ? YES : NO;
52
- (BOOL)isGreaterThanOrEqualTo:(id)_object {
53
return [self compare:_object] >= 0 ? YES : NO;
56
- (BOOL)doesContain:(id)_object {
60
- (BOOL)isLike:(NSString *)_object {
63
- (BOOL)isCaseInsensitiveLike:(NSString *)_object {
67
@end /* NSObject(ImplementedQualifierComparisons) */
69
@implementation NSArray(ImplementedQualifierComparisons)
71
- (BOOL)doesContain:(id)_object {
72
return [self containsObject:_object];
75
@end /* NSArray(ImplementedQualifierComparisons) */
77
@implementation NSString(ImplementedQualifierComparisons)
79
- (BOOL)isLike:(NSString *)_pattern {
83
NSString *first, *last;
86
if (null == nil) null = [[EONull null] retain];
88
if ((id)_pattern == (id)null)
91
if ([_pattern isEqual:@"*"])
95
cs = [_pattern componentsSeparatedByString:@"*"];
99
return [self isEqual:_pattern];
102
return [self isEqual:_pattern];
105
if ([_pattern hasPrefix:@"*"])
106
return [self hasSuffix:[cs objectAtIndex:1]];
107
if ([_pattern hasSuffix:@"*"])
108
return [self hasPrefix:[cs objectAtIndex:0]];
111
if ([_pattern hasPrefix:@"*"] && [_pattern hasSuffix:@"*"])
112
return [self rangeOfString:[cs objectAtIndex:1]].length == 0
117
NSEnumerator *enumerator;
124
enumerator = [cs objectEnumerator];
126
while ((str = [enumerator nextObject]) && idx < len) {
129
if ([str length] == 0)
132
r = NSMakeRange(idx, ([self length] - idx));
133
r = [self rangeOfString:str options:0 range:r];
139
return [enumerator nextObject] ? NO : YES;
142
first = [cs objectAtIndex:0];
143
last = [cs lastObject];
145
if (![self hasPrefix:first])
147
if (![self hasSuffix:last])
150
/* to be completed (match interior stuff, match '?') */
157
- (BOOL)isCaseInsensitiveLike:(NSString *)_pattern {
158
return [[self lowercaseString] isLike:[_pattern lowercaseString]];
161
@end /* NSString(ImplementedQualifierComparisons) */
163
@implementation NSNumber(ImplementedQualifierComparisons)
165
- (BOOL)isEqualTo:(id)_object {
166
if (_object == nil) return NO;
167
if (_object == self) return YES;
168
return [self isEqual:_object];
170
- (BOOL)isNotEqualTo:(id)_object {
171
if (_object == nil) return YES;
172
return ![self isEqualTo:_object];
175
- (BOOL)isLessThan:(id)_object {
176
if (_object == nil) return YES;
177
if (_object == self) return NO;
178
return [self compare:_object] < 0 ? YES : NO;
180
- (BOOL)isGreaterThan:(id)_object {
181
if (_object == nil) return NO;
182
if (_object == self) return NO;
183
return [self compare:_object] > 0 ? YES : NO;
185
- (BOOL)isLessThanOrEqualTo:(id)_object {
186
if (_object == nil) return YES;
187
if (_object == self) return YES;
188
return [self compare:_object] <= 0 ? YES : NO;
190
- (BOOL)isGreaterThanOrEqualTo:(id)_object {
191
if (_object == nil) return NO;
192
if (_object == self) return YES;
193
return [self compare:_object] >= 0 ? YES : NO;
196
@end /* NSNumber(ImplementedQualifierComparisons) */
198
@implementation NSDate(ImplementedQualifierComparisons)
200
#define CHECK_NULL(__VAL__, __RES__) \
201
{if (null == nil) null = [[EONull null] retain];} \
202
if (__VAL__ == nil || __VAL__ == null) return __RES__
204
- (BOOL)isLessThan:(id)_object {
205
CHECK_NULL(_object, NO);
206
return [self compare:_object] < 0 ? YES : NO;
208
- (BOOL)isGreaterThan:(id)_object {
209
CHECK_NULL(_object, YES);
210
return [self compare:_object] > 0 ? YES : NO;
213
- (BOOL)isLessThanOrEqualTo:(id)_object {
214
CHECK_NULL(_object, NO);
215
return [self compare:_object] <= 0 ? YES : NO;
217
- (BOOL)isGreaterThanOrEqualTo:(id)_object {
218
CHECK_NULL(_object, YES);
219
return [self compare:_object] >= 0 ? YES : NO;
222
@end /* NSDate(ImplementedQualifierComparisons) */