1 34 35 package org.logicalcobwebs.asm; 36 37 41 42 final class Item { 43 44 47 48 short index; 49 50 56 57 int type; 58 59 62 63 int intVal; 64 65 68 69 long longVal; 70 71 74 75 float floatVal; 76 77 80 81 double doubleVal; 82 83 87 88 String strVal1; 89 90 94 95 String strVal2; 96 97 101 102 String strVal3; 103 104 107 108 int hashCode; 109 110 114 115 Item next; 116 117 120 121 Item () { 122 } 123 124 130 131 Item (final short index, final Item i) { 132 this.index = index; 133 type = i.type; 134 intVal = i.intVal; 135 longVal = i.longVal; 136 floatVal = i.floatVal; 137 doubleVal = i.doubleVal; 138 strVal1 = i.strVal1; 139 strVal2 = i.strVal2; 140 strVal3 = i.strVal3; 141 hashCode = i.hashCode; 142 } 143 144 149 150 void set (final int intVal) { 151 this.type = ClassWriter.INT; 152 this.intVal = intVal; 153 this.hashCode = type + intVal; 154 } 155 156 161 162 void set (final long longVal) { 163 this.type = ClassWriter.LONG; 164 this.longVal = longVal; 165 this.hashCode = type + (int)longVal; 166 } 167 168 173 174 void set (final float floatVal) { 175 this.type = ClassWriter.FLOAT; 176 this.floatVal = floatVal; 177 this.hashCode = type + (int)floatVal; 178 } 179 180 185 186 void set (final double doubleVal) { 187 this.type = ClassWriter.DOUBLE; 188 this.doubleVal = doubleVal; 189 this.hashCode = type + (int)doubleVal; 190 } 191 192 200 201 void set ( 202 final int type, 203 final String strVal1, 204 final String strVal2, 205 final String strVal3) 206 { 207 this.type = type; 208 this.strVal1 = strVal1; 209 this.strVal2 = strVal2; 210 this.strVal3 = strVal3; 211 switch (type) { 212 case ClassWriter.UTF8: 213 case ClassWriter.STR: 214 case ClassWriter.CLASS: 215 hashCode = type + strVal1.hashCode(); 216 return; 217 case ClassWriter.NAME_TYPE: 218 hashCode = type + strVal1.hashCode()*strVal2.hashCode(); 219 return; 220 default: 224 hashCode = type + strVal1.hashCode()*strVal2.hashCode()*strVal3.hashCode(); 225 return; 226 } 227 } 228 229 236 237 boolean isEqualTo (final Item i) { 238 if (i.type == type) { 239 switch (type) { 240 case ClassWriter.INT: 241 return i.intVal == intVal; 242 case ClassWriter.LONG: 243 return i.longVal == longVal; 244 case ClassWriter.FLOAT: 245 return i.floatVal == floatVal; 246 case ClassWriter.DOUBLE: 247 return i.doubleVal == doubleVal; 248 case ClassWriter.UTF8: 249 case ClassWriter.STR: 250 case ClassWriter.CLASS: 251 return i.strVal1.equals(strVal1); 252 case ClassWriter.NAME_TYPE: 253 return i.strVal1.equals(strVal1) && 254 i.strVal2.equals(strVal2); 255 default: 259 return i.strVal1.equals(strVal1) && 260 i.strVal2.equals(strVal2) && 261 i.strVal3.equals(strVal3); 262 } 263 } 264 return false; 265 } 266 } 267 | Popular Tags |