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 #import "NSEnumerator+misc.h"
24 #import <Foundation/Foundation.h>
25 #import <EOControl/EOQualifier.h>
28 @interface _NGFilterEnumerator : NSEnumerator
33 + (NSEnumerator *)filterEnumeratorWithSource:(NSEnumerator *)_e;
35 - (NSEnumerator *)source;
39 @interface _NGQualifierFilterEnumerator : _NGFilterEnumerator
43 - (void)setQualifier:(EOQualifier *)_q;
44 - (EOQualifier *)qualifier;
47 @interface _NGSelFilterEnumerator : _NGFilterEnumerator
52 - (void)setSelector:(SEL)_s;
54 - (void)setArgument:(id)_arg;
58 @implementation NSEnumerator(misc)
60 - (NSEnumerator *)filterWithQualifier:(EOQualifier *)_qualifier {
63 e = [_NGQualifierFilterEnumerator filterEnumeratorWithSource:self];
64 [e setQualifier:_qualifier];
67 - (NSEnumerator *)filterWithQualifierString:(NSString *)_s {
70 q = [EOQualifier qualifierWithQualifierFormat:_s];
71 return [self filterWithQualifier:q];
74 - (NSEnumerator *)filterWithSelector:(SEL)_selector withObject:(id)_argument {
77 e = [_NGSelFilterEnumerator filterEnumeratorWithSource:self];
78 [e setSelector:_selector];
79 [e setArgument:_argument];
83 @end /* NSEnumerator(misc) */
85 @implementation _NGFilterEnumerator
87 - (id)initWithSource:(NSEnumerator *)_e {
88 self->source = [_e retain];
92 [self->source release];
96 + (NSEnumerator *)filterEnumeratorWithSource:(NSEnumerator *)_e {
97 return [[(_NGFilterEnumerator *)[self alloc] initWithSource:_e] autorelease];
100 - (NSEnumerator *)source {
105 return [self->source nextObject];
108 @end /* _NGFilterEnumerator */
110 @implementation _NGQualifierFilterEnumerator
117 - (void)setQualifier:(EOQualifier *)_q {
120 - (EOQualifier *)qualifier {
128 if ((obj = [self->source nextObject]) == nil)
133 if ([(id<EOQualifierEvaluation>)self->q evaluateWithObject:obj])
138 @end /* _NGQualifierFilterEnumerator */
140 @implementation _NGSelFilterEnumerator
147 - (void)setSelector:(SEL)_s {
154 - (void)setArgument:(id)_arg {
155 ASSIGN(self->arg, _arg);
164 BOOL (*m)(id,SEL,id);
166 if ((obj = [self->source nextObject]) == nil)
169 if ((m = (void *)[obj methodForSelector:self->sel]) == NULL)
172 if (m(obj, self->sel, self->arg))
177 @end /* _NGSelFilterEnumerator */