1 // 2 // ANTLRRewriteRuleNodeStream.m 3 // ANTLR 4 // 5 // Created by Kay Rpke on 7/16/07. 6 // Copyright 2007 classDump. All rights reserved. 7 // 8 9 #import "ANTLRRewriteRuleNodeStream.h" 10 #import "ANTLRRuntimeException.h" 11 12 @implementation ANTLRRewriteRuleNodeStream 13 14 + (ANTLRRewriteRuleNodeStream*) newANTLRRewriteRuleNodeStream:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription; 15 { 16 return [[ANTLRRewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription]; 17 } 18 19 + (ANTLRRewriteRuleNodeStream*) newANTLRRewriteRuleNodeStream:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription element:(id)anElement; 20 { 21 return [[ANTLRRewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription element:anElement]; 22 } 23 24 + (ANTLRRewriteRuleNodeStream*) newANTLRRewriteRuleNode:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription elements:(NSArray *)theElements; 25 { 26 return [[ANTLRRewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription elements:theElements]; 27 } 28 29 - (id) initWithTreeAdaptor:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription 30 { 31 if ((self = [super initWithTreeAdaptor:aTreeAdaptor description:anElementDescription]) != nil) { 32 dirty = NO; 33 isSingleElement = YES; 34 } 35 return self; 36 } 37 38 - (id) initWithTreeAdaptor:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription element:(id)anElement 39 { 40 if ((self = [super initWithTreeAdaptor:aTreeAdaptor description:anElementDescription element:anElement]) != nil) { 41 dirty = NO; 42 } 43 return self; 44 } 45 46 - (id) initWithTreeAdaptor:(id<ANTLRTreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription elements:(NSArray *)theElements 47 { 48 if ((self = [super init]) != nil) { 49 dirty = NO; 50 } 51 return self; 52 } 53 54 55 - (id) nextNode 56 { 57 if (dirty || (cursor >= [self size] && [self size] == 1)) 58 return [treeAdaptor dupNode:[self _next]]; 59 else 60 return [self _next]; 61 } 62 63 - (id<ANTLRBaseTree>) toTree:(id<ANTLRBaseTree>)element 64 { 65 return [treeAdaptor dupNode:element]; 66 } 67 68 - (id) dup:(id)element 69 { 70 return [treeAdaptor dupTree:element]; 71 @throw [ANTLRRuntimeException newException:@"ANTLRUnsupportedOperationException" reason:@"dup can't be called for a node stream."]; 72 } 73 74 @end 75