Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/java/math/SignedMutableBigInteger.java
41152 views
1
/*
2
* Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package java.math;
27
28
/**
29
* A class used to represent multiprecision integers that makes efficient
30
* use of allocated space by allowing a number to occupy only part of
31
* an array so that the arrays do not have to be reallocated as often.
32
* When performing an operation with many iterations the array used to
33
* hold a number is only increased when necessary and does not have to
34
* be the same size as the number it represents. A mutable number allows
35
* calculations to occur on the same number without having to create
36
* a new number for every step of the calculation as occurs with
37
* BigIntegers.
38
*
39
* Note that SignedMutableBigIntegers only support signed addition and
40
* subtraction. All other operations occur as with MutableBigIntegers.
41
*
42
* @see BigInteger
43
* @author Michael McCloskey
44
* @since 1.3
45
*/
46
47
class SignedMutableBigInteger extends MutableBigInteger {
48
49
/**
50
* The sign of this MutableBigInteger.
51
*/
52
int sign = 1;
53
54
// Constructors
55
56
/**
57
* The default constructor. An empty MutableBigInteger is created with
58
* a one word capacity.
59
*/
60
SignedMutableBigInteger() {
61
super();
62
}
63
64
/**
65
* Construct a new MutableBigInteger with a magnitude specified by
66
* the int val.
67
*/
68
SignedMutableBigInteger(int val) {
69
super(val);
70
}
71
72
/**
73
* Construct a new MutableBigInteger with a magnitude equal to the
74
* specified MutableBigInteger.
75
*/
76
SignedMutableBigInteger(MutableBigInteger val) {
77
super(val);
78
}
79
80
// Arithmetic Operations
81
82
/**
83
* Signed addition built upon unsigned add and subtract.
84
*/
85
void signedAdd(SignedMutableBigInteger addend) {
86
if (sign == addend.sign)
87
add(addend);
88
else
89
sign = sign * subtract(addend);
90
91
}
92
93
/**
94
* Signed addition built upon unsigned add and subtract.
95
*/
96
void signedAdd(MutableBigInteger addend) {
97
if (sign == 1)
98
add(addend);
99
else
100
sign = sign * subtract(addend);
101
102
}
103
104
/**
105
* Signed subtraction built upon unsigned add and subtract.
106
*/
107
void signedSubtract(SignedMutableBigInteger addend) {
108
if (sign == addend.sign)
109
sign = sign * subtract(addend);
110
else
111
add(addend);
112
113
}
114
115
/**
116
* Signed subtraction built upon unsigned add and subtract.
117
*/
118
void signedSubtract(MutableBigInteger addend) {
119
if (sign == 1)
120
sign = sign * subtract(addend);
121
else
122
add(addend);
123
if (intLen == 0)
124
sign = 1;
125
}
126
127
/**
128
* Print out the first intLen ints of this MutableBigInteger's value
129
* array starting at offset.
130
*/
131
public String toString() {
132
return this.toBigInteger(sign).toString();
133
}
134
135
}
136
137