Line data Source code
1 0 : /* 2 : 3 : OOExcludeObjectEnumerator.m 4 : 5 : 6 : Oolite 7 : Copyright (C) 2004-2013 Giles C Williams and contributors 8 : 9 : This program is free software; you can redistribute it and/or 10 : modify it under the terms of the GNU General Public License 11 : as published by the Free Software Foundation; either version 2 12 : of the License, or (at your option) any later version. 13 : 14 : This program is distributed in the hope that it will be useful, 15 : but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 : GNU General Public License for more details. 18 : 19 : You should have received a copy of the GNU General Public License 20 : along with this program; if not, write to the Free Software 21 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 22 : MA 02110-1301, USA. 23 : 24 : */ 25 : 26 : #import "OOExcludeObjectEnumerator.h" 27 : 28 : 29 : @implementation OOExcludeObjectEnumerator 30 : 31 0 : - (id) initWithEnumerator:(NSEnumerator *)enumerator 32 : excludingObject:(id)object 33 : { 34 : if ((self = [super init])) 35 : { 36 : _enumerator = [enumerator retain]; 37 : _excludeObject = [object retain]; 38 : } 39 : 40 : return self; 41 : } 42 : 43 : 44 0 : - (void) dealloc 45 : { 46 : [_enumerator release]; 47 : [_excludeObject release]; 48 : 49 : [super dealloc]; 50 : } 51 : 52 : 53 : + (id) enumeratorWithEnumerator:(NSEnumerator *)enumerator 54 : excludingObject:(id)object 55 : { 56 : if (object == nil) return enumerator; 57 : if (enumerator == nil) return nil; 58 : 59 : return [[[self alloc] initWithEnumerator:enumerator excludingObject:object] autorelease]; 60 : } 61 : 62 : 63 0 : - (id) nextObject 64 : { 65 : id result = nil; 66 : do 67 : { 68 : result = [_enumerator nextObject]; 69 : } while (result == _excludeObject && result != nil); 70 : 71 : return result; 72 : } 73 : 74 : @end 75 : 76 : 77 : @implementation NSEnumerator (OOExcludingObject) 78 : 79 : - (id) ooExcludingObject:(id)object 80 : { 81 : return [OOExcludeObjectEnumerator enumeratorWithEnumerator:self excludingObject:object]; 82 : } 83 : 84 : @end