1// 2// LinkBase.m 3// ANTLR 4// 5// Created by Alan Condit on 6/14/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 "LinkBase.h" 33 34@implementation LinkBase 35 36@synthesize fPrev; 37@synthesize fNext; 38 39+(id<LinkList>)newLinkBase 40{ 41 return [[LinkBase alloc] init]; 42} 43 44+(id<LinkList>)newLinkBase:(id<LinkList>)np Prev:(id<LinkList>)pp 45{ 46 return [[LinkBase alloc] initWithPtr:np Prev:pp]; 47} 48 49-(id<LinkList>)init 50{ 51 if ((self = [super init]) != nil) { 52 fNext = nil; 53 fPrev = nil; 54 } 55 return(self); 56} 57 58-(id<LinkList>)initWithPtr:(id<LinkList>)np Prev:(id<LinkList>)pp 59{ 60 if ((self = [super init]) != nil) { 61 fNext = np; 62 fPrev = pp; 63 } 64 return(self); 65} 66 67-(void)dealloc 68{ 69#ifdef DEBUG_DEALLOC 70 NSLog( @"called dealloc in LinkBase" ); 71#endif 72 if (fNext) [fNext release]; 73 if (fPrev) [fPrev release]; 74 [super dealloc]; 75} 76 77- (id) copyWithZone:(NSZone *)aZone 78{ 79 LinkBase *copy; 80 81 copy = [[self class] allocWithZone:aZone]; 82 copy.fPrev = fPrev; 83 copy.fNext = fNext; 84 return( copy ); 85} 86 87-(id<LinkList>)append:(id<LinkList>)node 88{ 89 node.fPrev = (id<LinkList>)self; 90 node.fNext = (id<LinkList>)self.fNext; 91 if (node.fNext != nil) 92 node.fNext.fPrev = node; 93 self.fNext = node; 94 return( node ); 95} 96 97-(id<LinkList>)insert:(id<LinkList>)node 98{ 99 node.fNext = self; 100 node.fPrev = self.fPrev; 101 if (node.fPrev != nil) 102 node.fPrev.fNext = node; 103 self.fPrev = node; 104 return( node ); 105} 106 107-(id<LinkList>)getfNext 108{ 109 return(fNext); 110} 111 112-(void)setfNext:(id<LinkList>)np 113{ 114 fNext = np; 115} 116 117-(id<LinkList>)getfPrev 118{ 119 return(fPrev); 120} 121 122-(void)setfPrev:(id<LinkList>)pp 123{ 124 fPrev = pp; 125} 126 127@end 128