• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//
2//  RewriteRuleNodeStream.m
3//  ANTLR
4//
5//  Created by Kay Röpke on 7/16/07.
6//  Copyright 2007 classDump. All rights reserved.
7//
8
9#import "RewriteRuleNodeStream.h"
10#import "RuntimeException.h"
11
12@implementation RewriteRuleNodeStream
13
14+ (RewriteRuleNodeStream*) newRewriteRuleNodeStream:(id<TreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription;
15{
16    return [[RewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription];
17}
18
19+ (RewriteRuleNodeStream*) newRewriteRuleNodeStream:(id<TreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription element:(id)anElement;
20{
21    return [[RewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription element:anElement];
22}
23
24+ (RewriteRuleNodeStream*) newRewriteRuleNode:(id<TreeAdaptor>)aTreeAdaptor description:(NSString *)anElementDescription elements:(NSArray *)theElements;
25{
26    return [[RewriteRuleNodeStream alloc] initWithTreeAdaptor:aTreeAdaptor description:anElementDescription elements:theElements];
27}
28
29- (id) initWithTreeAdaptor:(id<TreeAdaptor>)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<TreeAdaptor>)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<TreeAdaptor>)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<BaseTree>) toTree:(id<BaseTree>)element
64{
65    return [treeAdaptor dupNode:element];
66}
67
68- (id) dup:(id)element
69{
70    return [treeAdaptor dupTree:element];
71    @throw [RuntimeException newException:@"UnsupportedOperationException" reason:@"dup can't be called for a node stream."];
72}
73
74@end
75