1// 2// RuleMemo.m 3// ANTLR 4// 5// Created by Alan Condit on 6/16/10. 6// [The "BSD licence"] 7// Copyright (c) 2010 Alan Condit 8// All rights reserved. 9// 10// Redistribution and use in source and binary forms, with or without 11// modification, are permitted provided that the following conditions 12// are met: 13// 1. Redistributions of source code must retain the above copyright 14// notice, this list of conditions and the following disclaimer. 15// 2. Redistributions in binary form must reproduce the above copyright 16// notice, this list of conditions and the following disclaimer in the 17// documentation and/or other materials provided with the distribution. 18// 3. The name of the author may not be used to endorse or promote products 19// derived from this software without specific prior written permission. 20// 21// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 32#import "RuleMemo.h" 33 34 35@implementation RuleMemo 36 37@synthesize startIndex; 38@synthesize stopIndex; 39 40+ (RuleMemo *)newRuleMemo 41{ 42 return [[RuleMemo alloc] init]; 43} 44 45+ (RuleMemo *)newRuleMemoWithStartIndex:(ACNumber *)anIndex StopIndex:(ACNumber *)aStopIndex 46{ 47 return [[RuleMemo alloc] initWithStartIndex:anIndex StopIndex:aStopIndex]; 48} 49 50- (id) init 51{ 52 if ((self = [super init]) != nil ) { 53 startIndex = nil; 54 stopIndex = nil; 55 } 56 return (self); 57} 58 59- (id) initWithStartIndex:(ACNumber *)aStartIndex StopIndex:(ACNumber *)aStopIndex 60{ 61 if ((self = [super init]) != nil ) { 62 [aStartIndex retain]; 63 startIndex = aStartIndex; 64 [aStopIndex retain]; 65 stopIndex = aStopIndex; 66 } 67 return (self); 68} 69 70- (id) copyWithZone:(NSZone *)aZone 71{ 72 RuleMemo *copy; 73 74 copy = [super copyWithZone:aZone]; 75 copy.startIndex = startIndex; 76 copy.stopIndex = stopIndex; 77 return( copy ); 78} 79 80- (NSInteger)count 81{ 82 NSInteger aCnt = 0; 83 84 if (startIndex != nil) aCnt++; 85 if (stopIndex != nil) aCnt++; 86 return aCnt; 87} 88 89- (NSInteger) size 90{ 91 return (2 * sizeof(id)); 92} 93 94- (RuleMemo *)getRuleWithStartIndex:(NSInteger)aStartIndex 95{ 96 RuleMemo *aMatchMemo = self; 97 do { 98 if (aStartIndex == [aMatchMemo.startIndex integerValue] ) { 99 return aMatchMemo; 100 } 101 aMatchMemo = aMatchMemo.fNext; 102 } while ( aMatchMemo != nil ); 103 return nil; 104} 105 106- (ACNumber *)getStartIndex:(NSInteger)aStartIndex 107{ 108 RuleMemo *aMatchMemo = self; 109 do { 110 if (aStartIndex == [aMatchMemo.startIndex integerValue] ) { 111 return aMatchMemo.stopIndex; 112 } 113 aMatchMemo = aMatchMemo.fNext; 114 } while ( aMatchMemo != nil ); 115 return nil; 116} 117 118- (ACNumber *)getStopIndex:(NSInteger)aStartIndex 119{ 120 RuleMemo *aMatchMemo = self; 121 do { 122 if (aStartIndex == [aMatchMemo.startIndex integerValue] ) { 123 return aMatchMemo.stopIndex; 124 } 125 aMatchMemo = aMatchMemo.fNext; 126 } while ( aMatchMemo != nil ); 127 return nil; 128} 129 130- (ACNumber *)getStartIndex; 131{ 132 return startIndex; 133} 134 135- (void)setStartIndex:(ACNumber *)aStartIndex 136{ 137 if ( aStartIndex != startIndex ) { 138 if ( startIndex ) [startIndex release]; 139 [aStartIndex retain]; 140 } 141 startIndex = aStartIndex; 142} 143 144- (ACNumber *)getStopIndex; 145{ 146 return stopIndex; 147} 148 149- (void)setStopIndex:(ACNumber *)aStopIndex 150{ 151 if ( aStopIndex != stopIndex ) { 152 if ( stopIndex ) [stopIndex release]; 153 [aStopIndex retain]; 154 } 155 stopIndex = aStopIndex; 156} 157 158@end 159