1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The wrapper for the primitive type {@code int}. 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 23726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Implementation note: The "bit twiddling" methods in this class use techniques 24726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * described in <a href="http://www.hackersdelight.org/">Henry S. Warren, 25726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Jr.'s Hacker's Delight, (Addison Wesley, 2002)</a> and <a href= 26726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * "http://graphics.stanford.edu/~seander/bithacks.html">Sean Anderson's 27726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Bit Twiddling Hacks.</a> 28f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 29726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @see java.lang.Long 30726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @since 1.0 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 320d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes@FindBugsSuppressWarnings("DM_NUMBER_CTOR") 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class Integer extends Number implements Comparable<Integer> { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 1360826667806852920L; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 38726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * The int value represented by this Integer 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final int value; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the maximum {@code int} value, 2<sup>31</sup>-1. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MAX_VALUE = 0x7FFFFFFF; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the minimum {@code int} value, -2<sup>31</sup>. 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MIN_VALUE = 0x80000000; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the number of bits needed to represent an {@code int} in 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * two's complement form. 55f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 56f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SIZE = 32; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /** 61726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Table for Seal's algorithm for Number of Trailing Zeros. Hacker's Delight 62726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * online, Figure 5-18 (http://www.hackersdelight.org/revisions.pdf) 63726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * The entries whose value is -1 are never referenced. 64726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 65171dc20afe5071d5cbfad7103903bfa2c1f8d00fElliott Hughes private static final byte[] NTZ_TABLE = { 66726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 32, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, 67726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, 68726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, 69726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 70726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch }; 71f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@link Class} object that represents the primitive type {@code int}. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 76726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static final Class<Integer> TYPE 77726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch = (Class<Integer>) int[].class.getComponentType(); 78726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Note: Integer.TYPE can't be set to "int.class", since *that* is 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // defined to be "java.lang.Integer.TYPE"; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code Integer} with the specified primitive integer 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 84f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the primitive integer value to store in the new instance. 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Integer(int value) { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.value = value; 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code Integer} from the specified string. 94f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of an integer value. 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 988890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value. 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseInt(String) 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Integer(String string) throws NumberFormatException { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(parseInt(string)); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte byteValue() { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (byte) value; 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this object to the specified integer object to determine their 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * relative order. 113f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer object to compare this object to. 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a negative value if the value of this integer is less than the 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value of {@code object}; 0 if the value of this integer and the 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value of {@code object} are equal; a positive value if the value 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of this integer is greater than the value of {@code object}. 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Comparable 121f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.2 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int compareTo(Integer object) { 124c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes return compare(value, object.value); 125c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes } 126c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes 127c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes /** 128c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * Compares two {@code int} values. 129c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * @return 0 if lhs = rhs, less than 0 if lhs < rhs, and greater than 0 if lhs > rhs. 130c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * @since 1.7 131c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * @hide 1.7 132c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes */ 133c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes public static int compare(int lhs, int rhs) { 134c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1371f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes private static NumberFormatException invalidInt(String s) { 1381f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid int: \"" + s + "\""); 1391f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 1401f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string and returns a {@code Integer} instance if the 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string can be decoded into an integer value. The string may be an 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * optional minus sign "-" followed by a hexadecimal ("0x..." or "#..."), 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * octal ("0..."), or decimal ("...") representation of an integer. 146f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a string representation of an integer value. 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an {@code Integer} containing the value represented by 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 1528890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value. 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer decode(String string) throws NumberFormatException { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 1571f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char firstDigit = string.charAt(i); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = firstDigit == '-'; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 1) { 1631f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project firstDigit = string.charAt(++i); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int base = 10; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (firstDigit == '0') { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (++i == length) { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(0); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((firstDigit = string.charAt(i)) == 'x' || firstDigit == 'X') { 174f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (++i == length) { 1751f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 8; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (firstDigit == '#') { 182f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (++i == length) { 1831f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int result = parse(string, i, base, negative); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(result); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double doubleValue() { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this instance with the specified object and indicates if they 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are equal. In order to be equal, {@code o} must be an instance of 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Integer} and have the same integer value as this object. 201f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param o 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare this integer with. 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Integer}; {@code false} otherwise. 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object o) { 2090d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes return (o instanceof Integer) && (((Integer) o).value == value); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float floatValue() { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Integer} value of the system property identified by 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns {@code null} if {@code string} is {@code null} 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or empty, if the property can not be found or if its value can not be 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsed as an integer. 222f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as an {@code Integer} or 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}. 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer getInteger(String string) { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Integer} value of the system property identified by 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as an integer. 248f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no integer 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * system property with the requested name. 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as an {@code Integer} or the 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default value. 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer getInteger(String string, int defaultValue) { 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Integer} value of the system property identified by 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as an integer. 277f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no integer 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * system property with the requested name. 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as an {@code Integer} or the 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default value. 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer getInteger(String string, Integer defaultValue) { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the primitive value of this int. 308f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this object's primitive value. 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int intValue() { 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long longValue() { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal integer value. The ASCII 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character \u002d ('-') is recognized as the minus sign. 324f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of an integer value. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive integer value represented by {@code string}. 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3298890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value. 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int parseInt(String string) throws NumberFormatException { 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parseInt(string, 10); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed integer value using the specified 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. The ASCII character \u002d ('-') is recognized as the minus sign. 338f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of an integer value. 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive integer value represented by {@code string} using 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code radix}. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3468890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value, 3478890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * or {@code radix < Character.MIN_RADIX || 3488890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 3501f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes public static int parseInt(String string, int radix) throws NumberFormatException { 3511f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) { 3521f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid radix: " + radix); 3531f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 3541f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (string == null) { 3551f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 3591f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = string.charAt(i) == '-'; 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative && ++i == length) { 3631f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, i, radix, negative); 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3691f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes private static int parse(String string, int offset, int radix, boolean negative) throws NumberFormatException { 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int max = Integer.MIN_VALUE / radix; 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int result = 0, length = string.length(); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (offset < length) { 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int digit = Character.digit(string.charAt(offset++), radix); 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (digit == -1) { 3751f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (max > result) { 3781f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int next = result * radix - digit; 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (next > result) { 3821f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = next; 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!negative) { 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = -result; 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result < 0) { 3891f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidInt(string); 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short shortValue() { 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (short) value; 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified integer into its binary string representation. The 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returned string is a concatenation of '0' and '1' characters. 403f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to convert. 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the binary string representation of {@code i}. 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toBinaryString(int i) { 40982a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.intToBinaryString(i); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified integer into its hexadecimal string 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation. The returned string is a concatenation of characters from 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * '0' to '9' and 'a' to 'f'. 416f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to convert. 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hexadecimal string representation of {@code i}. 420f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toHexString(int i) { 422347b2a604114602da9bc4ae040278f74d11c2f51Brian Carlstrom return IntegralToString.intToHexString(i, false, 0); 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified integer into its octal string representation. The 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returned string is a concatenation of characters from '0' to '7'. 428f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to convert. 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the octal string representation of {@code i}. 432f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toOctalString(int i) { 43482a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.intToOctalString(i); 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Integer.toString(value); 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified integer into its decimal string representation. 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of a minus sign if the number is 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * negative and characters from '0' to '9'. 446f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 447726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param i 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to convert. 449726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the decimal string representation of {@code i}. 450726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 451726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toString(int i) { 45282a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.intToString(i); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 456438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Converts the specified signed integer into a string representation based on the 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified radix. The returned string is a concatenation of a minus sign 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the number is negative and characters from '0' to '9' and 'a' to 'z', 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * depending on the radix. If {@code radix} is not in the interval defined 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by {@code Character.MIN_RADIX} and {@code Character.MAX_RADIX} then 10 is 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used as the base for the conversion. 462f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 463438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * <p>This method treats its argument as signed. If you want to convert an 464438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * unsigned value to one of the common non-decimal bases, you may find 465438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * {@link #toBinaryString}, {@code #toHexString}, or {@link #toOctalString} 466438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * more convenient. 467f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 469438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * the signed integer to convert. 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the base to use for the conversion. 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string representation of {@code i}. 473f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(int i, int radix) { 47582a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.intToString(i, radix); 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal integer value. 480f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of an integer value. 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an {@code Integer} instance containing the integer value 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * represented by {@code string}. 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 4868890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value. 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseInt(String) 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer valueOf(String string) throws NumberFormatException { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseInt(string)); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed integer value using the specified 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. 496f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of an integer value. 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an {@code Integer} instance containing the integer value 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * represented by {@code string} using {@code radix}. 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 5048890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as an integer value, or 5058890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * {@code radix < Character.MIN_RADIX || 5068890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseInt(String, int) 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 5098890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes public static Integer valueOf(String string, int radix) throws NumberFormatException { 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseInt(string, radix)); 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the highest (leftmost) bit of the specified integer that is 1 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and returns the bit mask value for that bit. This is also referred to as 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the Most Significant 1 Bit. Returns zero if the specified integer is 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zero. 518f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to examine. 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the bit mask indicating the highest 1 bit in {@code i}. 522f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int highestOneBit(int i) { 525726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight, Figure 3-1 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i |= (i >> 1); 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i |= (i >> 2); 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i |= (i >> 4); 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i |= (i >> 8); 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i |= (i >> 16); 531726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i - (i >>> 1); 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the lowest (rightmost) bit of the specified integer that is 1 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and returns the bit mask value for that bit. This is also referred 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to as the Least Significant 1 Bit. Returns zero if the specified integer 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is zero. 539f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to examine. 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the bit mask indicating the lowest 1 bit in {@code i}. 543f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int lowestOneBit(int i) { 546726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i & -i; 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of leading zeros in the specified integer prior to 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@link #highestOneBit(int) highest one bit}. 552f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to examine. 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of leading zeros in {@code i}. 556f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int numberOfLeadingZeros(int i) { 559726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight, Figure 5-6 560726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i <= 0) { 561726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (~i >> 26) & 32; 562726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 563726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int n = 1; 564726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i >> 16 == 0) { 565726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 16; 566726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 16; 567726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 568726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i >> 24 == 0) { 569726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 8; 570726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 8; 571726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 572726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i >> 28 == 0) { 573726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 4; 574726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 4; 575726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 576726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i >> 30 == 0) { 577726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 2; 578726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 2; 579726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 580726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return n - (i >>> 31); 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of trailing zeros in the specified integer after 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@link #lowestOneBit(int) lowest one bit}. 586f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to examine. 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of trailing zeros in {@code i}. 590f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int numberOfTrailingZeros(int i) { 5939c63d8ea5b107c32f947d49242f41b049f227629Elliott Hughes return NTZ_TABLE[((i & -i) * 0x0450FBAF) >>> 26]; 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Counts the number of 1 bits in the specified integer; this is also 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referred to as population count. 599f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer to examine. 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of 1 bits in {@code i}. 603f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int bitCount(int i) { 606726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight, Figure 5-2 607726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i -= (i >> 1) & 0x55555555; 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i = (i & 0x33333333) + ((i >> 2) & 0x33333333); 609726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >> 4) + i) & 0x0F0F0F0F; 610726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >> 8; 611726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >> 16; 612726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i & 0x0000003F; 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified integer to the left by the specified 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of bits. 618f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value to rotate left. 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 624f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int rotateLeft(int i, int distance) { 627726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 32 (JLS3 15.19), so we needn't mask -distance 628726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (i << distance) | (i >>> -distance); 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified integer to the right by the specified 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of bits. 634f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value to rotate right. 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 640f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int rotateRight(int i, int distance) { 643726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 32 (JLS3 15.19), so we needn't mask -distance 644726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (i >>> distance) | (i << -distance); 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bytes of the specified integer. 649f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value for which to reverse the byte order. 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 653f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int reverseBytes(int i) { 656726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 657726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 658726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >>> 8) & 0x00FF00FF) | ((i & 0x00FF00FF) << 8); 659726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return ( i >>> 16 ) | ( i << 16); 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bits of the specified integer. 664f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value for which to reverse the bit order. 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 668f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int reverse(int i) { 671726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 672726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 673726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >>> 1) & 0x55555555) | ((i & 0x55555555) << 1); 674726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >>> 2) & 0x33333333) | ((i & 0x33333333) << 2); 675726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >>> 4) & 0x0F0F0F0F) | ((i & 0x0F0F0F0F) << 4); 676726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = ((i >>> 8) & 0x00FF00FF) | ((i & 0x00FF00FF) << 8); 677726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return ((i >>> 16) ) | ((i ) << 16); 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the {@code signum} function for the specified 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * integer. 683f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value to check. 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return -1 if {@code i} is negative, 1 if {@code i} is positive, 0 if 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code i} is zero. 688f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int signum(int i) { 691726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (i >> 31) | (-i >>> 31); // Hacker's delight 2-7 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code Integer} instance for the specified integer value. 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If it is not necessary to get a new {@code Integer} instance, it is 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * recommended to use this method instead of the constructor, since it 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maintains a cache of instances which may result in better performance. 700f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param i 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the integer value to store in the instance. 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Integer} instance containing {@code i}. 704f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Integer valueOf(int i) { 707726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128]; 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 710726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /** 711726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * A cache of instances used by {@link Integer#valueOf(int)} and auto-boxing 712726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 713726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch private static final Integer[] SMALL_VALUES = new Integer[256]; 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 715726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch static { 7160d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes for (int i = -128; i < 128; i++) { 717726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch SMALL_VALUES[i + 128] = new Integer(i); 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 721