1// 2// ANTLRMapElement.m 3// ANTLR 4// 5// Created by Alan Condit on 6/8/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 <Cocoa/Cocoa.h> 33#import "ANTLRMapElement.h" 34 35 36@implementation ANTLRMapElement 37 38@synthesize name; 39@synthesize node; 40 41+ (id) newANTLRMapElement 42{ 43 return [[ANTLRMapElement alloc] init]; 44} 45 46+ (id) newANTLRMapElementWithName:(NSString *)aName Type:(NSInteger)aTType 47{ 48 return [[ANTLRMapElement alloc] initWithName:aName Type:aTType]; 49} 50 51+ (id) newANTLRMapElementWithNode:(NSInteger)aTType Node:(id)aNode 52{ 53 return [[ANTLRMapElement alloc] initWithNode:aTType Node:aNode]; 54} 55 56+ (id) newANTLRMapElementWithName:(NSString *)aName Node:(id)aNode 57{ 58 return [[ANTLRMapElement alloc] initWithName:aName Node:aNode]; 59} 60 61+ (id) newANTLRMapElementWithObj1:(id)anObj1 Obj2:(id)anObj2 62{ 63 return [[ANTLRMapElement alloc] initWithObj1:anObj1 Obj2:anObj2]; 64} 65 66- (id) init 67{ 68 self = [super init]; 69 if ( self != nil ) { 70 index = nil; 71 name = nil; 72 } 73 return self; 74} 75 76- (id) initWithName:(NSString *)aName Type:(NSInteger)aTType 77{ 78 self = [super init]; 79 if ( self != nil ) { 80 index = [[NSNumber numberWithInteger: aTType] retain]; 81 name = [[NSString stringWithString:aName] retain]; 82 } 83 return self; 84} 85 86- (id) initWithNode:(NSInteger)aTType Node:(id)aNode 87{ 88 self = [super initWithAnIndex:[NSNumber numberWithInteger:aTType]]; 89 if ( self != nil ) { 90 node = aNode; 91 if ( node ) [node retain]; 92 } 93 return self; 94} 95 96- (id) initWithName:(NSString *)aName Node:(id)aNode 97{ 98 self = [super init]; 99 if ( self != nil ) { 100 name = [[NSString stringWithString:aName] retain]; 101 node = aNode; 102 if ( node ) [node retain]; 103 } 104 return self; 105} 106 107- (id) initWithObj1:(id)anIndex Obj2:(id)aNode 108{ 109 self = [super initWithAnIndex:anIndex]; 110 if ( self != nil ) { 111 node = aNode; 112 if ( node ) [node retain]; 113 } 114 return self; 115} 116 117- (void) dealloc 118{ 119#ifdef DEBUG_DEALLOC 120 NSLog( @"called dealloc in ANTLRMapElement" ); 121#endif 122 if ( name ) [name release]; 123 if ( node ) [node release]; 124 [super dealloc]; 125} 126 127- (id) copyWithZone:(NSZone *)aZone 128{ 129 ANTLRMapElement *copy; 130 131 copy = [super copyWithZone:aZone]; 132 if (name) copy.name = name; 133 if (node) copy.node = node; 134 return( copy ); 135} 136 137- (NSInteger) count 138{ 139 NSInteger aCnt = 0; 140 if (name != nil) aCnt++;; 141 if (node != nil) aCnt++;; 142 return aCnt; 143} 144 145- (NSInteger)size 146{ 147 NSInteger aSize = 0; 148 if ( name ) aSize += sizeof(id); 149 if ( node ) aSize += sizeof(id); 150 return aSize; 151} 152 153 154- (NSString *)getName 155{ 156 return name; 157} 158 159- (void)setName:(NSString *)aName 160{ 161 if ( aName != name ) { 162 if ( name ) [name release]; 163 [aName retain]; 164 } 165 name = aName; 166} 167 168- (id)getNode 169{ 170 return node; 171} 172 173- (void)setNode:(id)aNode 174{ if ( aNode != node ) { 175 if ( node ) [node release]; 176 [aNode retain]; 177 } 178 node = aNode; 179} 180 181- (void)putNode:(id)aNode 182{ 183 index = ((ANTLRMapElement *)aNode).index; 184 if (((ANTLRMapElement *)aNode).name) { 185 name = [((ANTLRMapElement *)aNode).name retain]; 186 node = nil; 187 } 188 if (((ANTLRMapElement *)aNode).node) { 189 name = nil; 190 node = [((ANTLRMapElement *)aNode).node retain]; 191 } 192} 193 194- (void)putNode:(id)aNode With:(NSInteger)uniqueID 195{ 196 index = ((ANTLRMapElement *)aNode).index; 197 if (((ANTLRMapElement *)aNode).name) { 198 name = [((ANTLRMapElement *)aNode).name retain]; 199 node = nil; 200 } 201 if (((ANTLRMapElement *)aNode).node) { 202 name = nil; 203 node = [((ANTLRMapElement *)aNode).node retain]; 204 } 205} 206 207@end 208