1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/*
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *             of Java bytecode.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Copyright (c) 2002-2009 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 Onoratoimport proguard.classfile.ClassConstants;
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/**
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This class represents a partially evaluated long value.
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic abstract class LongValue extends Category2Value
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the specific long value, if applicable.
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public long value()
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return 0;
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Basic unary methods.
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the negated value of this LongValue.
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public abstract LongValue negate();
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Converts this LongValue to an IntegerValue.
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public abstract IntegerValue convertToInteger();
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Converts this LongValue to a FloatValue.
56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public abstract FloatValue convertToFloat();
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Converts this LongValue to a DoubleValue.
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public abstract DoubleValue convertToDouble();
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Basic binary methods.
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the generalization of this LongValue and the given other
69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue generalize(LongValue other)
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.generalize(this);
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the sum of this LongValue and the given LongValue.
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue add(LongValue other)
80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.add(this);
82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of this LongValue and the given LongValue.
86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtract(LongValue other)
88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.subtractFrom(this);
90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of the given LongValue and this LongValue.
94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtractFrom(LongValue other)
96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.subtract(this);
98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the product of this LongValue and the given LongValue.
102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue multiply(LongValue other)
104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    throws ArithmeticException
105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.multiply(this);
107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of this LongValue and the given LongValue.
111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divide(LongValue other)
113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    throws ArithmeticException
114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.divideOf(this);
116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of the given LongValue and this LongValue.
120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divideOf(LongValue other)
122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    throws ArithmeticException
123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.divide(this);
125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of this LongValue divided by the given
129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainder(LongValue other)
132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    throws ArithmeticException
133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.remainderOf(this);
135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of the given LongValue divided by this
139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainderOf(LongValue other)
142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    throws ArithmeticException
143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.remainder(this);
145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted left by the given IntegerValue.
149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftLeft(IntegerValue other)
151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.shiftLeftOf(this);
153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted right by the given IntegerValue.
157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftRight(IntegerValue other)
159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.shiftRightOf(this);
161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this unsigned LongValue, shifted left by the given
165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * IntegerValue.
166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue unsignedShiftRight(IntegerValue other)
168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.unsignedShiftRightOf(this);
170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>and</i> of this LongValue and the given
174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue and(LongValue other)
177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.and(this);
179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>or</i> of this LongValue and the given
183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue or(LongValue other)
186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.or(this);
188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>xor</i> of this LongValue and the given
192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue xor(LongValue other)
195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.xor(this);
197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value -1, 0, or 1, if this LongValue is
201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given LongValue, respectively.
202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public IntegerValue compare(LongValue other)
204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return other.compareReverse(this);
206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Derived binary methods.
210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value 1, 0, or -1, if this LongValue is
213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given LongValue, respectively.
214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final IntegerValue compareReverse(LongValue other)
216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return compare(other).negate();
218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Similar binary methods, but this time with more specific arguments.
222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the generalization of this LongValue and the given other
225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue generalize(SpecificLongValue other)
228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the sum of this LongValue and the given SpecificLongValue.
235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue add(SpecificLongValue other)
237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of this LongValue and the given SpecificLongValue.
243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtract(SpecificLongValue other)
245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of the given SpecificLongValue and this LongValue.
251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtractFrom(SpecificLongValue other)
253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the product of this LongValue and the given SpecificLongValue.
259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue multiply(SpecificLongValue other)
261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of this LongValue and the given
267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divide(SpecificLongValue other)
270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of the given SpecificLongValue and this
276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divideOf(SpecificLongValue other)
279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of this LongValue divided by the given
285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainder(SpecificLongValue other)
288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of the given SpecificLongValue divided by this
294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainderOf(SpecificLongValue other)
297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted left by the given SpecificLongValue.
303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftLeft(SpecificLongValue other)
305b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
306b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
307b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
308b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
309b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
310b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted right by the given SpecificLongValue.
311b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
312b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftRight(SpecificLongValue other)
313b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
314b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
315b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
316b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
317b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
318b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this unsigned LongValue, shifted right by the given
319b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
320b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
321b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue unsignedShiftRight(SpecificLongValue other)
322b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
323b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
324b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
325b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
326b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
327b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>and</i> of this LongValue and the given
328b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
329b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
330b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue and(SpecificLongValue other)
331b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
332b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
333b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
334b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
335b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
336b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>or</i> of this LongValue and the given
337b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
338b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
339b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue or(SpecificLongValue other)
340b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
341b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
342b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
343b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
344b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
345b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>xor</i> of this LongValue and the given
346b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * SpecificLongValue.
347b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
348b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue xor(SpecificLongValue other)
349b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
350b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
351b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
352b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
353b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
354b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value -1, 0, or 1, if this LongValue is
355b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given SpecificLongValue,
356b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * respectively.
357b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
358b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public IntegerValue compare(SpecificLongValue other)
359b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
360b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return new ComparisonValue(this, other);
361b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
362b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
363b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
364b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Derived binary methods.
365b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
366b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
367b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value 1, 0, or -1, if this LongValue is
368b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given SpecificLongValue,
369b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * respectively.
370b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
371b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final IntegerValue compareReverse(SpecificLongValue other)
372b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
373b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return compare(other).negate();
374b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
375b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
376b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
377b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Similar binary methods, but this time with particular arguments.
378b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
379b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
380b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the generalization of this LongValue and the given other
381b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
382b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
383b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue generalize(ParticularLongValue other)
384b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
385b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return generalize((SpecificLongValue)other);
386b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
387b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
388b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
389b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
390b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the sum of this LongValue and the given ParticularLongValue.
391b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
392b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue add(ParticularLongValue other)
393b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
394b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return add((SpecificLongValue)other);
395b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
396b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
397b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
398b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of this LongValue and the given ParticularLongValue.
399b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
400b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtract(ParticularLongValue other)
401b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
402b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return subtract((SpecificLongValue)other);
403b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
404b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
405b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
406b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the difference of the given ParticularLongValue and this LongValue.
407b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
408b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue subtractFrom(ParticularLongValue other)
409b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
410b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return subtractFrom((SpecificLongValue)other);
411b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
412b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
413b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
414b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the product of this LongValue and the given ParticularLongValue.
415b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
416b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue multiply(ParticularLongValue other)
417b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
418b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return multiply((SpecificLongValue)other);
419b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
420b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
421b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
422b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of this LongValue and the given
423b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
424b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
425b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divide(ParticularLongValue other)
426b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
427b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return divide((SpecificLongValue)other);
428b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
429b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
430b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
431b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the quotient of the given ParticularLongValue and this
432b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
433b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
434b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue divideOf(ParticularLongValue other)
435b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
436b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return divideOf((SpecificLongValue)other);
437b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
438b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
439b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
440b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of this LongValue divided by the given
441b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
442b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
443b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainder(ParticularLongValue other)
444b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
445b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return remainder((SpecificLongValue)other);
446b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
447b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
448b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
449b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the remainder of the given ParticularLongValue divided by this
450b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * LongValue.
451b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
452b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue remainderOf(ParticularLongValue other)
453b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
454b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return remainderOf((SpecificLongValue)other);
455b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
456b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
457b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
458b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted left by the given ParticularIntegerValue.
459b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
460b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftLeft(ParticularIntegerValue other)
461b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
462b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return shiftLeft((SpecificIntegerValue)other);
463b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
464b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
465b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
466b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this LongValue, shifted right by the given ParticularIntegerValue.
467b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
468b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue shiftRight(ParticularIntegerValue other)
469b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
470b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return shiftRight((SpecificIntegerValue)other);
471b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
472b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
473b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
474b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns this unsigned LongValue, shifted right by the given
475b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularIntegerValue.
476b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
477b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue unsignedShiftRight(ParticularIntegerValue other)
478b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
479b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return unsignedShiftRight((SpecificIntegerValue)other);
480b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
481b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
482b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
483b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>and</i> of this LongValue and the given
484b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
485b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
486b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue and(ParticularLongValue other)
487b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
488b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return and((SpecificLongValue)other);
489b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
490b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
491b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
492b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>or</i> of this LongValue and the given
493b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
494b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
495b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue or(ParticularLongValue other)
496b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
497b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return or((SpecificLongValue)other);
498b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
499b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
500b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
501b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the logical <i>xor</i> of this LongValue and the given
502b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * ParticularLongValue.
503b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
504b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public LongValue xor(ParticularLongValue other)
505b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
506b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return xor((SpecificLongValue)other);
507b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
508b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
509b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
510b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value -1, 0, or 1, if this LongValue is
511b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given ParticularLongValue,
512b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * respectively.
513b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
514b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public IntegerValue compare(ParticularLongValue other)
515b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
516b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return compare((SpecificLongValue)other);
517b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
518b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
519b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
520b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Derived binary methods.
521b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
522b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
523b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns an IntegerValue with value 1, 0, or -1, if this LongValue is
524b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * less than, equal to, or greater than the given ParticularLongValue,
525b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * respectively.
526b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
527b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final IntegerValue compareReverse(ParticularLongValue other)
528b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
529b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return compare(other).negate();
530b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
531b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
532b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
533b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Implementations for Value.
534b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
535b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final LongValue longValue()
536b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
537b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this;
538b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
539b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
540b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final Value generalize(Value other)
541b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
542b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return this.generalize(other.longValue());
543b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
544b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
545b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final int computationalType()
546b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
547b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return TYPE_LONG;
548b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
549b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
550b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final String internalType()
551b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
552b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return String.valueOf(ClassConstants.INTERNAL_TYPE_INT);
553b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
554b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
555