History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/text/normalizer/VersionInfo.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/text/normalizer/VersionInfo.java+185−0
@@ -0,0 +1,185 @@
1/*
2 * Copyright (c) 2005, 2009, 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
37package sun.text.normalizer;
38
39import 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 */
46public 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 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}