Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java
38830 views
1
/*
2
* Copyright (c) 2005, 2011, 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
*******************************************************************************
27
* (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
28
* *
29
* The original version of this source code and documentation is copyrighted *
30
* and owned by IBM, These materials are provided under terms of a License *
31
* Agreement between IBM and Sun. This technology is protected by multiple *
32
* US and International patents. This notice and attribution to IBM may not *
33
* to removed. *
34
*******************************************************************************
35
*/
36
37
package sun.text.normalizer;
38
39
import java.util.HashMap;
40
41
/**
42
* Class to store version numbers of the form major.minor.milli.micro.
43
* @author synwee
44
* @stable ICU 2.6
45
*/
46
public final class VersionInfo
47
{
48
49
// public methods ------------------------------------------------------
50
51
/**
52
* Returns an instance of VersionInfo with the argument version.
53
* @param version version String in the format of "major.minor.milli.micro"
54
* or "major.minor.milli" or "major.minor" or "major",
55
* where major, minor, milli, micro are non-negative numbers
56
* <= 255. If the trailing version numbers are
57
* not specified they are taken as 0s. E.g. Version "3.1" is
58
* equivalent to "3.1.0.0".
59
* @return an instance of VersionInfo with the argument version.
60
* @exception throws an IllegalArgumentException when the argument version
61
* is not in the right format
62
* @stable ICU 2.6
63
*/
64
public static VersionInfo getInstance(String version)
65
{
66
int length = version.length();
67
int array[] = {0, 0, 0, 0};
68
int count = 0;
69
int index = 0;
70
71
while (count < 4 && index < length) {
72
char c = version.charAt(index);
73
if (c == '.') {
74
count ++;
75
}
76
else {
77
c -= '0';
78
if (c < 0 || c > 9) {
79
throw new IllegalArgumentException(INVALID_VERSION_NUMBER_);
80
}
81
array[count] *= 10;
82
array[count] += c;
83
}
84
index ++;
85
}
86
if (index != length) {
87
throw new IllegalArgumentException(
88
"Invalid version number: String '" + version + "' exceeds version format");
89
}
90
for (int i = 0; i < 4; i ++) {
91
if (array[i] < 0 || array[i] > 255) {
92
throw new IllegalArgumentException(INVALID_VERSION_NUMBER_);
93
}
94
}
95
96
return getInstance(array[0], array[1], array[2], array[3]);
97
}
98
99
/**
100
* Returns an instance of VersionInfo with the argument version.
101
* @param major major version, non-negative number <= 255.
102
* @param minor minor version, non-negative number <= 255.
103
* @param milli milli version, non-negative number <= 255.
104
* @param micro micro version, non-negative number <= 255.
105
* @exception throws an IllegalArgumentException when either arguments are
106
* negative or > 255
107
* @stable ICU 2.6
108
*/
109
public static VersionInfo getInstance(int major, int minor, int milli,
110
int micro)
111
{
112
// checks if it is in the hashmap
113
// else
114
if (major < 0 || major > 255 || minor < 0 || minor > 255 ||
115
milli < 0 || milli > 255 || micro < 0 || micro > 255) {
116
throw new IllegalArgumentException(INVALID_VERSION_NUMBER_);
117
}
118
int version = getInt(major, minor, milli, micro);
119
Integer key = Integer.valueOf(version);
120
Object result = MAP_.get(key);
121
if (result == null) {
122
result = new VersionInfo(version);
123
MAP_.put(key, result);
124
}
125
return (VersionInfo)result;
126
}
127
128
/**
129
* Compares other with this VersionInfo.
130
* @param other VersionInfo to be compared
131
* @return 0 if the argument is a VersionInfo object that has version
132
* information equals to this object.
133
* Less than 0 if the argument is a VersionInfo object that has
134
* version information greater than this object.
135
* Greater than 0 if the argument is a VersionInfo object that
136
* has version information less than this object.
137
* @stable ICU 2.6
138
*/
139
public int compareTo(VersionInfo other)
140
{
141
return m_version_ - other.m_version_;
142
}
143
144
// private data members ----------------------------------------------
145
146
/**
147
* Version number stored as a byte for each of the major, minor, milli and
148
* micro numbers in the 32 bit int.
149
* Most significant for the major and the least significant contains the
150
* micro numbers.
151
*/
152
private int m_version_;
153
/**
154
* Map of singletons
155
*/
156
private static final HashMap<Integer, Object> MAP_ = new HashMap<>();
157
/**
158
* Error statement string
159
*/
160
private static final String INVALID_VERSION_NUMBER_ =
161
"Invalid version number: Version number may be negative or greater than 255";
162
163
// private constructor -----------------------------------------------
164
165
/**
166
* Constructor with int
167
* @param compactversion a 32 bit int with each byte representing a number
168
*/
169
private VersionInfo(int compactversion)
170
{
171
m_version_ = compactversion;
172
}
173
174
/**
175
* Gets the int from the version numbers
176
* @param major non-negative version number
177
* @param minor non-negativeversion number
178
* @param milli non-negativeversion number
179
* @param micro non-negativeversion number
180
*/
181
private static int getInt(int major, int minor, int milli, int micro)
182
{
183
return (major << 24) | (minor << 16) | (milli << 8) | micro;
184
}
185
}
186
187