This is Enumerator.m in view mode; [Download] [Up]
/* -*-ObjC-*-
*******************************************************************************
*
* File: Enumerator.m
* RCS: Enumerator.m,v 1.1 1998/05/30 01:30:13 tom Exp
* Description: Implementation of EnhanceEnumerator class. (shades of NSEnumerator)
* Author: Tom Hageman <tom@basil.icce.rug.nl>
* Created: May 1998
* Modified:
* Language: Objective-C
* Package: EnhanceMail
* Status: Experimental
*
* Copyright (C) 1996-1998 Tom Hageman, but otherwise this file is perfect freeware.
*
*******************************************************************************
*/
#import "Enumerator.h"
@implementation EnhanceEnumerator
+ allocFromZone:(NXZone *)zone
{
if ([self class] == [EnhanceEnumerator class])
{
[self error:"BUG: cannot create instances of abstract class %s\n", [self name]];
return nil;
}
return [super allocFromZone:zone];
}
- nextObject
{
return [self subclassResponsibility:_cmd];
}
@end // EnhanceEnumerator
@interface EnhanceListEnumerator : EnhanceEnumerator
{
List *list;
int index;
}
- initWithList:(List *)aList;
- nextObject;
@end // EnhanceListEnumerator
@implementation EnhanceListEnumerator
- initWithList:(List *)aList
{
if ((self = [super init]) != nil)
{
list = aList;
index = 0;
}
return self;
}
- nextObject
{
if (index >= [list count])
{
[self free]; // cleanup myself, in lieu of autorelease pool.
return nil;
}
return [list objectAt:index++];
}
@end // EnhanceListEnumerator
@interface EnhanceListReverseEnumerator : EnhanceListEnumerator
- initWithList:(List *)aList;
- nextObject;
@end
@implementation EnhanceListReverseEnumerator
- initWithList:(List *)aList
{
if ((self = [super initWithList:aList]) != nil)
{
index = [list count];
}
return self;
}
- nextObject
{
if (index <= 0)
{
[self free]; // cleanup myself, in lieu of autorelease pool.
return nil;
}
return [list objectAt:--index];
}
@end // EnhanceListReverseEnumerator
@implementation List (EnhanceEnumerator)
- (EnhanceEnumerator *)enhanceObjectEnumerator
{
return [[EnhanceListEnumerator alloc] initWithList:self];
}
- (EnhanceEnumerator *)enhanceReverseObjectEnumerator;
{
return [[EnhanceListReverseEnumerator alloc] initWithList:self];
}
@end // List (EnhanceEnumerator)
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.