/*******************************************************************************
	nsenumerate.h	Wed Oct 8 2003
		Copyright (c) 2003-2004 Jonathan 'Wolf' Rentzsch (jon * redshed * net)
		Some rights reserved: <http://creativecommons.org/licenses/by/1.0/>
	
	***************************************************************************/

#import <Foundation/Foundation.h>

#define nsenumerate_getEnumerator( TYPE, OBJ )				\
	(TYPE)([OBJ isKindOfClass:[NSEnumerator class]]			\
	? OBJ													\
	: [OBJ performSelector:@selector(objectEnumerator)])

#define	nsenumerate( CONTAINER, ITERATOR_TYPE, ITERATOR_SYMBOL )			\
for( ITERATOR_TYPE															\
	 *enumerator = nsenumerate_getEnumerator(ITERATOR_TYPE*, CONTAINER),	\
	 *ITERATOR_SYMBOL = [((NSEnumerator*) enumerator) nextObject];			\
	 ITERATOR_SYMBOL != nil;												\
	 ITERATOR_SYMBOL = [((NSEnumerator*) enumerator) nextObject] )

#define	nsenumerat( CONTAINER, ITERATOR_SYMBOL )					\
for( id																\
	 enumerator = nsenumerate_getEnumerator(id, CONTAINER),			\
	 ITERATOR_SYMBOL = [((NSEnumerator*) enumerator) nextObject];	\
	 ITERATOR_SYMBOL != nil;										\
	 ITERATOR_SYMBOL = [((NSEnumerator*) enumerator) nextObject] )
