1 // 2 // ANTLRNodeMapElement.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 "ANTLRNodeMapElement.h" 33 34 static NSInteger _aUniqueID; 35 36 @implementation ANTLRNodeMapElement 37 38 @synthesize node; 39 40 + (void)initialize 41 { 42 _aUniqueID = 0; 43 } 44 45 + (ANTLRNodeMapElement *)newANTLRNodeMapElement 46 { 47 return [[ANTLRNodeMapElement alloc] init]; 48 } 49 50 + (ANTLRNodeMapElement *)newANTLRNodeMapElementWithIndex:(id)anIndex Node:(id<ANTLRBaseTree>)aNode 51 { 52 return [[ANTLRNodeMapElement alloc] initWithAnIndex:anIndex Node:aNode]; 53 } 54 55 - (id) init 56 { 57 if ((self = [super init]) != nil ) { 58 index = nil; 59 node = nil; 60 } 61 return (self); 62 } 63 64 - (id) initWithAnIndex:(id)anIndex Node:(id)aNode 65 { 66 self = [super initWithAnIndex:anIndex]; 67 if ( self ) { 68 if ( aNode != node ) { 69 if ( node ) [node release]; 70 [aNode retain]; 71 } 72 node = aNode; 73 } 74 return (self); 75 } 76 77 - (id) copyWithZone:(NSZone *)aZone 78 { 79 ANTLRNodeMapElement *copy; 80 81 copy = [super copyWithZone:aZone]; 82 copy.node = node; 83 return( copy ); 84 } 85 86 - (id<ANTLRBaseTree>)getNode 87 { 88 return node; 89 } 90 91 - (void)setNode:(id<ANTLRBaseTree>)aNode 92 { 93 if ( aNode != node ) { 94 if ( node ) [node release]; 95 [aNode retain]; 96 } 97 node = aNode; 98 } 99 100 - (NSInteger)size 101 { 102 NSInteger aSize = 0; 103 if (node != nil) aSize += sizeof(id); 104 if (index != nil) aSize += sizeof(id); 105 return( aSize ); 106 } 107 108 @end 109