~ubuntu-branches/ubuntu/saucy/sope/saucy

« back to all changes in this revision

Viewing changes to sope-core/EOControl/NSObject+EOQualifierOps.m

  • Committer: Package Import Robot
  • Author(s): Jeroen Dekkers
  • Date: 2012-05-09 15:39:17 UTC
  • Revision ID: package-import@ubuntu.com-20120509153917-nr4jlm8mktma1yv3
Tags: upstream-1.3.14
ImportĀ upstreamĀ versionĀ 1.3.14

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
  Copyright (C) 2000-2005 SKYRIX Software AG
 
3
 
 
4
  This file is part of SOPE.
 
5
 
 
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
 
9
  later version.
 
10
 
 
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.
 
15
 
 
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
 
19
  02111-1307, USA.
 
20
*/
 
21
 
 
22
#include "EOQualifier.h"
 
23
#include "EONull.h"
 
24
#include "common.h"
 
25
 
 
26
static EONull *null = nil;
 
27
 
 
28
/* values */
 
29
 
 
30
@interface NSObject(CompareIFace)
 
31
- (NSComparisonResult)compare:(id)_object;
 
32
@end
 
33
 
 
34
@implementation NSObject(ImplementedQualifierComparisons)
 
35
 
 
36
- (BOOL)isEqualTo:(id)_object {
 
37
  return [self isEqual:_object];
 
38
}
 
39
- (BOOL)isNotEqualTo:(id)_object {
 
40
  return ![self isEqualTo:_object];
 
41
}
 
42
 
 
43
- (BOOL)isLessThan:(id)_object {
 
44
  return [self compare:_object] < 0 ? YES : NO;
 
45
}
 
46
- (BOOL)isGreaterThan:(id)_object {
 
47
  return [self compare:_object] > 0 ? YES : NO;
 
48
}
 
49
- (BOOL)isLessThanOrEqualTo:(id)_object {
 
50
  return [self compare:_object] <= 0 ? YES : NO;
 
51
}
 
52
- (BOOL)isGreaterThanOrEqualTo:(id)_object {
 
53
  return [self compare:_object] >= 0 ? YES : NO;
 
54
}
 
55
 
 
56
- (BOOL)doesContain:(id)_object {
 
57
  return NO;
 
58
}
 
59
 
 
60
- (BOOL)isLike:(NSString *)_object {
 
61
  return NO;
 
62
}
 
63
- (BOOL)isCaseInsensitiveLike:(NSString *)_object {
 
64
  return NO;
 
65
}
 
66
 
 
67
@end /* NSObject(ImplementedQualifierComparisons) */
 
68
 
 
69
@implementation NSArray(ImplementedQualifierComparisons)
 
70
 
 
71
- (BOOL)doesContain:(id)_object {
 
72
  return [self containsObject:_object];
 
73
}
 
74
 
 
75
@end /* NSArray(ImplementedQualifierComparisons) */
 
76
 
 
77
@implementation NSString(ImplementedQualifierComparisons)
 
78
 
 
79
- (BOOL)isLike:(NSString *)_pattern {
 
80
  NSArray  *cs;
 
81
  unsigned count;
 
82
#if 0  
 
83
  NSString *first, *last;
 
84
#endif  
 
85
  
 
86
  if (null == nil) null = [[EONull null] retain];
 
87
 
 
88
  if ((id)_pattern == (id)null)
 
89
    return NO;
 
90
  
 
91
  if ([_pattern isEqual:@"*"])
 
92
    /* all match */
 
93
    return YES;
 
94
  
 
95
  cs    = [_pattern componentsSeparatedByString:@"*"];
 
96
  count = [cs count];
 
97
 
 
98
  if (count == 0)
 
99
    return [self isEqual:_pattern];
 
100
  
 
101
  if (count == 1)
 
102
    return [self isEqual:_pattern];
 
103
  
 
104
  if (count == 2) {
 
105
    if ([_pattern hasPrefix:@"*"])
 
106
      return [self hasSuffix:[cs objectAtIndex:1]];
 
107
    if ([_pattern hasSuffix:@"*"])
 
108
      return [self hasPrefix:[cs objectAtIndex:0]];
 
109
  }
 
110
  if (count == 3) {
 
111
    if ([_pattern hasPrefix:@"*"] && [_pattern hasSuffix:@"*"])
 
112
      return [self rangeOfString:[cs objectAtIndex:1]].length == 0
 
113
        ? NO : YES;
 
114
  }
 
115
#if 1
 
116
  {
 
117
    NSEnumerator *enumerator;
 
118
    int          idx;
 
119
    int          len;
 
120
    NSString     *str;
 
121
 
 
122
    idx        = 0;
 
123
    len        = [self length];
 
124
    enumerator = [cs objectEnumerator];
 
125
    
 
126
    while ((str = [enumerator nextObject]) && idx < len) {
 
127
      NSRange r;
 
128
      
 
129
      if ([str length] == 0)
 
130
        continue;
 
131
      
 
132
      r = NSMakeRange(idx, ([self length] - idx));
 
133
      r = [self rangeOfString:str options:0 range:r];
 
134
      if (r.length == 0)
 
135
        return NO;
 
136
      
 
137
      idx += r.length;
 
138
    }
 
139
    return [enumerator nextObject] ? NO : YES;
 
140
  }
 
141
#else
 
142
  first = [cs objectAtIndex:0];
 
143
  last  = [cs lastObject];
 
144
 
 
145
  if (![self hasPrefix:first])
 
146
    return NO;
 
147
  if (![self hasSuffix:last])
 
148
    return NO;
 
149
 
 
150
  /* to be completed (match interior stuff, match '?') */
 
151
  
 
152
  return YES;
 
153
#endif
 
154
  return NO;
 
155
}
 
156
 
 
157
- (BOOL)isCaseInsensitiveLike:(NSString *)_pattern {
 
158
  return [[self lowercaseString] isLike:[_pattern lowercaseString]];
 
159
}
 
160
 
 
161
@end /* NSString(ImplementedQualifierComparisons) */
 
162
 
 
163
@implementation NSNumber(ImplementedQualifierComparisons)
 
164
 
 
165
- (BOOL)isEqualTo:(id)_object {
 
166
  if (_object == nil) return NO;
 
167
  if (_object == self) return YES;
 
168
  return [self isEqual:_object];
 
169
}
 
170
- (BOOL)isNotEqualTo:(id)_object {
 
171
  if (_object == nil) return YES;
 
172
  return ![self isEqualTo:_object];
 
173
}
 
174
 
 
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;
 
179
}
 
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;
 
184
}
 
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;
 
189
}
 
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;
 
194
}
 
195
 
 
196
@end /* NSNumber(ImplementedQualifierComparisons) */
 
197
 
 
198
@implementation NSDate(ImplementedQualifierComparisons)
 
199
 
 
200
#define CHECK_NULL(__VAL__, __RES__) \
 
201
  {if (null == nil) null = [[EONull null] retain];} \
 
202
  if (__VAL__ == nil || __VAL__ == null) return __RES__
 
203
 
 
204
- (BOOL)isLessThan:(id)_object {
 
205
  CHECK_NULL(_object, NO);
 
206
  return [self compare:_object] < 0 ? YES : NO;
 
207
}
 
208
- (BOOL)isGreaterThan:(id)_object {
 
209
  CHECK_NULL(_object, YES);
 
210
  return [self compare:_object] > 0 ? YES : NO;
 
211
}
 
212
 
 
213
- (BOOL)isLessThanOrEqualTo:(id)_object {
 
214
  CHECK_NULL(_object, NO);
 
215
  return [self compare:_object] <= 0 ? YES : NO;
 
216
}
 
217
- (BOOL)isGreaterThanOrEqualTo:(id)_object {
 
218
  CHECK_NULL(_object, YES);
 
219
  return [self compare:_object] >= 0 ? YES : NO;
 
220
}
 
221
 
 
222
@end /* NSDate(ImplementedQualifierComparisons) */