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