ArrayIterator.h revision 324c4644fee44b9898524c09511bd33c3f12e2df
1/*
2 * [The "BSD license"]
3 *  Copyright (c) 2011 Terence Parr and Alan Condit
4 *  All rights reserved.
5 *
6 *  Redistribution and use in source and binary forms, with or without
7 *  modification, are permitted provided that the following conditions
8 *  are met:
9 *  1. Redistributions of source code must retain the above copyright
10 *     notice, this list of conditions and the following disclaimer.
11 *  2. Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in the
13 *     documentation and/or other materials provided with the distribution.
14 *  3. The name of the author may not be used to endorse or promote products
15 *     derived from this software without specific prior written permission.
16 *
17 *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28#import <Cocoa/Cocoa.h>
29#import <Foundation/Foundation.h>
30
31/**
32 * Iterator for an array so I don't have to copy the array to a List
33 * just to make it iteratable.
34 */
35
36/*
37 * this is the state structure for FastEnumeration
38 typedef struct {
39 unsigned long state;
40 id *itemsPtr;
41 unsigned long *mutationsPtr;
42 unsigned long extra[5];
43 } NSFastEnumerationState;
44 */
45
46@interface ArrayIterator : NSObject {
47
48    __strong id peekObj;
49    /**
50     * NSArrays are fixed size; precompute count.
51     */
52    NSInteger count;
53    NSInteger index;
54    __strong NSArray *anArray;
55
56}
57
58+ (ArrayIterator *) newIterator:(NSArray *)array;
59+ (ArrayIterator *) newIteratorForDictKey:(NSDictionary *)dict;
60+ (ArrayIterator *) newIteratorForDictObj:(NSDictionary *)dict;
61
62- (id) initWithArray:(NSArray *)array;
63- (id) initWithDictKey:(NSDictionary *)dict;
64- (id) initWithDictObj:(NSDictionary *)dict;
65
66- (BOOL) hasNext;
67- (id) nextObject;
68- (NSArray *)allObjects;
69- (void) removeObjectAtIndex:(NSInteger)idx;
70- (NSInteger) count;
71- (void) setCount:(NSInteger)cnt;
72- (void) dealloc;
73
74@property (retain) id peekObj;
75@property (assign, getter=count, setter=setCount:) NSInteger count;
76@property (assign) NSInteger index;
77@property (retain) NSArray *anArray;
78
79@end
80