1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option) 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version. 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details. 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc., 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.evaluation.value; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This LongValue represents a particular long value. 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofinal class ParticularLongValue extends SpecificLongValue 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final long value; 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Creates a new particular long value. 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public ParticularLongValue(long value) 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.value = value; 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for LongValue. 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public long value() 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return value; 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations of unary methods of LongValue. 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue negate() 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(-value); 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public IntegerValue convertToInteger() 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularIntegerValue((int)value); 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public FloatValue convertToFloat() 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularFloatValue((float)value); 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public DoubleValue convertToDouble() 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularDoubleValue((double)value); 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations of binary methods of LongValue. 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue generalize(LongValue other) 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.generalize(this); 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue add(LongValue other) 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.add(this); 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue subtract(LongValue other) 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.subtractFrom(this); 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue subtractFrom(LongValue other) 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.subtract(this); 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue multiply(LongValue other) 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.multiply(this); 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue divide(LongValue other) 101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.divideOf(this); 104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue divideOf(LongValue other) 107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.divide(this); 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue remainder(LongValue other) 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.remainderOf(this); 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue remainderOf(LongValue other) 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.remainder(this); 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue shiftLeft(IntegerValue other) 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.shiftLeftOf(this); 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue shiftRight(IntegerValue other) 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.shiftRightOf(this); 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue unsignedShiftRight(IntegerValue other) 135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.unsignedShiftRightOf(this); 137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue and(LongValue other) 140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.and(this); 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue or(LongValue other) 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.or(this); 147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue xor(LongValue other) 150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.xor(this); 152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public IntegerValue compare(LongValue other) 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return other.compareReverse(this); 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations of binary LongValue methods with ParticularLongValue 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // arguments. 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue generalize(ParticularLongValue other) 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return generalize((SpecificLongValue)other); 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue add(ParticularLongValue other) 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value + other.value); 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue subtract(ParticularLongValue other) 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value - other.value); 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue subtractFrom(ParticularLongValue other) 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(other.value - this.value); 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue multiply(ParticularLongValue other) 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value * other.value); 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue divide(ParticularLongValue other) 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value / other.value); 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue divideOf(ParticularLongValue other) 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(other.value / this.value); 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue remainder(ParticularLongValue other) 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value % other.value); 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue remainderOf(ParticularLongValue other) 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throws ArithmeticException 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(other.value % this.value); 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue shiftLeft(ParticularIntegerValue other) 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value << other.value()); 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue shiftRight(ParticularIntegerValue other) 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value >> other.value()); 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue unsignedShiftRight(ParticularIntegerValue other) 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value >>> other.value()); 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue and(ParticularLongValue other) 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value & other.value); 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue or(ParticularLongValue other) 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value | other.value); 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public LongValue xor(ParticularLongValue other) 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return new ParticularLongValue(this.value ^ other.value); 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for Value. 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public boolean isParticular() 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return true; 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for Object. 252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public boolean equals(Object object) 254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return super.equals(object) && 256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.value == ((ParticularLongValue)object).value; 257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public int hashCode() 261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return this.getClass().hashCode() ^ 263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato (int)value; 264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public String toString() 268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return value+"L"; 270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}