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