• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <Foundation/Foundation.h>
29 
30 /**
31  * Iterator for an array so I don't have to copy the array to a List
32  * just to make it iteratable.
33  */
34 
35 /*
36  * this is the state structure for FastEnumeration
37  typedef struct {
38  unsigned long state;
39  id *itemsPtr;
40  unsigned long *mutationsPtr;
41  unsigned long extra[5];
42  } NSFastEnumerationState;
43  */
44 
45 @interface ArrayIterator : NSObject {
46 
47     __strong id peekObj;
48     /**
49      * NSArrays are fixed size; precompute count.
50      */
51     NSInteger count;
52     NSInteger index;
53     __strong NSArray *anArray;
54 
55 }
56 
57 + (ArrayIterator *) newIterator:(NSArray *)array;
58 + (ArrayIterator *) newIteratorForDictKey:(NSDictionary *)dict;
59 + (ArrayIterator *) newIteratorForDictObj:(NSDictionary *)dict;
60 
61 - (id) initWithArray:(NSArray *)array;
62 - (id) initWithDictKey:(NSDictionary *)dict;
63 - (id) initWithDictObj:(NSDictionary *)dict;
64 
65 - (BOOL) hasNext;
66 - (id) nextObject;
67 - (NSArray *)allObjects;
68 - (void) removeObjectAtIndex:(NSInteger)idx;
69 - (NSInteger) count;
70 - (void) setCount:(NSInteger)cnt;
71 - (void) dealloc;
72 
73 @property (retain) id peekObj;
74 @property (assign, getter=count, setter=setCount:) NSInteger count;
75 @property (assign) NSInteger index;
76 @property (retain) NSArray *anArray;
77 
78 @end
79