2 Copyright (C) 2000-2003 SKYRIX Software AG
4 This file is part of OGo
6 OGo 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 OGo 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 OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "EOQualifier.h"
27 static EONull *null = nil;
31 @interface NSObject(CompareIFace)
32 - (NSComparisonResult)compare:(id)_object;
35 @implementation NSObject(ImplementedQualifierComparisons)
37 - (BOOL)isEqualTo:(id)_object {
38 return [self isEqual:_object];
40 - (BOOL)isNotEqualTo:(id)_object {
41 return ![self isEqualTo:_object];
44 - (BOOL)isLessThan:(id)_object {
45 return [self compare:_object] < 0 ? YES : NO;
47 - (BOOL)isGreaterThan:(id)_object {
48 return [self compare:_object] > 0 ? YES : NO;
50 - (BOOL)isLessThanOrEqualTo:(id)_object {
51 return [self compare:_object] <= 0 ? YES : NO;
53 - (BOOL)isGreaterThanOrEqualTo:(id)_object {
54 return [self compare:_object] >= 0 ? YES : NO;
57 - (BOOL)doesContain:(id)_object {
61 - (BOOL)isLike:(NSString *)_object {
64 - (BOOL)isCaseInsensitiveLike:(NSString *)_object {
68 @end /* NSObject(ImplementedQualifierComparisons) */
70 @implementation NSArray(ImplementedQualifierComparisons)
72 - (BOOL)doesContain:(id)_object {
73 return [self containsObject:_object];
76 @end /* NSArray(ImplementedQualifierComparisons) */
78 @implementation NSString(ImplementedQualifierComparisons)
80 - (BOOL)isLike:(NSString *)_pattern {
84 NSString *first, *last;
87 if (null == nil) null = [[EONull null] retain];
89 if ((id)_pattern == (id)null)
92 if ([_pattern isEqual:@"*"])
96 cs = [_pattern componentsSeparatedByString:@"*"];
100 return [self isEqual:_pattern];
103 return [self isEqual:_pattern];
106 if ([_pattern hasPrefix:@"*"])
107 return [self hasSuffix:[cs objectAtIndex:1]];
108 if ([_pattern hasSuffix:@"*"])
109 return [self hasPrefix:[cs objectAtIndex:0]];
112 if ([_pattern hasPrefix:@"*"] && [_pattern hasSuffix:@"*"])
113 return [self rangeOfString:[cs objectAtIndex:1]].length == 0
118 NSEnumerator *enumerator;
125 enumerator = [cs objectEnumerator];
127 while ((str = [enumerator nextObject]) && idx < len) {
130 if ([str length] == 0)
133 r = NSMakeRange(idx, ([self length] - idx));
134 r = [self rangeOfString:str options:0 range:r];
140 return [enumerator nextObject] ? NO : YES;
143 first = [cs objectAtIndex:0];
144 last = [cs lastObject];
146 if (![self hasPrefix:first])
148 if (![self hasSuffix:last])
151 /* to be completed (match interior stuff, match '?') */
158 - (BOOL)isCaseInsensitiveLike:(NSString *)_pattern {
159 return [[self lowercaseString] isLike:[_pattern lowercaseString]];
162 @end /* NSString(ImplementedQualifierComparisons) */
164 @implementation NSNumber(ImplementedQualifierComparisons)
166 - (BOOL)isEqualTo:(id)_object {
167 if (_object == nil) return NO;
168 if (_object == self) return YES;
169 return [self isEqual:_object];
171 - (BOOL)isNotEqualTo:(id)_object {
172 if (_object == nil) return YES;
173 return ![self isEqualTo:_object];
176 - (BOOL)isLessThan:(id)_object {
177 if (_object == nil) return YES;
178 if (_object == self) return NO;
179 return [self compare:_object] < 0 ? YES : NO;
181 - (BOOL)isGreaterThan:(id)_object {
182 if (_object == nil) return NO;
183 if (_object == self) return NO;
184 return [self compare:_object] > 0 ? YES : NO;
186 - (BOOL)isLessThanOrEqualTo:(id)_object {
187 if (_object == nil) return YES;
188 if (_object == self) return YES;
189 return [self compare:_object] <= 0 ? YES : NO;
191 - (BOOL)isGreaterThanOrEqualTo:(id)_object {
192 if (_object == nil) return NO;
193 if (_object == self) return YES;
194 return [self compare:_object] >= 0 ? YES : NO;
197 @end /* NSNumber(ImplementedQualifierComparisons) */
199 @implementation NSDate(ImplementedQualifierComparisons)
201 #define CHECK_NULL(__VAL__, __RES__) \
202 {if (null == nil) null = [[EONull null] retain];} \
203 if (__VAL__ == nil || __VAL__ == null) return __RES__
205 - (BOOL)isLessThan:(id)_object {
206 CHECK_NULL(_object, NO);
207 return [self compare:_object] < 0 ? YES : NO;
209 - (BOOL)isGreaterThan:(id)_object {
210 CHECK_NULL(_object, YES);
211 return [self compare:_object] > 0 ? YES : NO;
214 - (BOOL)isLessThanOrEqualTo:(id)_object {
215 CHECK_NULL(_object, NO);
216 return [self compare:_object] <= 0 ? YES : NO;
218 - (BOOL)isGreaterThanOrEqualTo:(id)_object {
219 CHECK_NULL(_object, YES);
220 return [self compare:_object] >= 0 ? YES : NO;
223 @end /* NSDate(ImplementedQualifierComparisons) */