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 #import "NSEnumerator+misc.h"
23 #import <Foundation/Foundation.h>
24 #import <EOControl/EOQualifier.h>
27 @interface _NGFilterEnumerator : NSEnumerator
32 + (NSEnumerator *)filterEnumeratorWithSource:(NSEnumerator *)_e;
34 - (NSEnumerator *)source;
38 @interface _NGQualifierFilterEnumerator : _NGFilterEnumerator
42 - (void)setQualifier:(EOQualifier *)_q;
43 - (EOQualifier *)qualifier;
46 @interface _NGSelFilterEnumerator : _NGFilterEnumerator
51 - (void)setSelector:(SEL)_s;
53 - (void)setArgument:(id)_arg;
57 @implementation NSEnumerator(misc)
59 - (NSEnumerator *)filterWithQualifier:(EOQualifier *)_qualifier {
62 e = [_NGQualifierFilterEnumerator filterEnumeratorWithSource:self];
63 [e setQualifier:_qualifier];
66 - (NSEnumerator *)filterWithQualifierString:(NSString *)_s {
69 q = [EOQualifier qualifierWithQualifierFormat:_s];
70 return [self filterWithQualifier:q];
73 - (NSEnumerator *)filterWithSelector:(SEL)_selector withObject:(id)_argument {
76 e = [_NGSelFilterEnumerator filterEnumeratorWithSource:self];
77 [e setSelector:_selector];
78 [e setArgument:_argument];
82 @end /* NSEnumerator(misc) */
84 @implementation _NGFilterEnumerator
86 - (id)initWithSource:(NSEnumerator *)_e {
87 self->source = [_e retain];
91 [self->source release];
95 + (NSEnumerator *)filterEnumeratorWithSource:(NSEnumerator *)_e {
96 return [[(_NGFilterEnumerator *)[self alloc] initWithSource:_e] autorelease];
99 - (NSEnumerator *)source {
104 return [self->source nextObject];
107 @end /* _NGFilterEnumerator */
109 @implementation _NGQualifierFilterEnumerator
116 - (void)setQualifier:(EOQualifier *)_q {
119 - (EOQualifier *)qualifier {
127 if ((obj = [self->source nextObject]) == nil)
132 if ([(id<EOQualifierEvaluation>)self->q evaluateWithObject:obj])
137 @end /* _NGQualifierFilterEnumerator */
139 @implementation _NGSelFilterEnumerator
146 - (void)setSelector:(SEL)_s {
153 - (void)setArgument:(id)_arg {
154 ASSIGN(self->arg, _arg);
163 BOOL (*m)(id,SEL,id);
165 if ((obj = [self->source nextObject]) == nil)
168 if ((m = (void *)[obj methodForSelector:self->sel]) == NULL)
171 if (m(obj, self->sel, self->arg))
176 @end /* _NGSelFilterEnumerator */