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 long}. 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.Integer 30f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.0 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 320d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes@FindBugsSuppressWarnings("DM_NUMBER_CTOR") 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class Long extends Number implements Comparable<Long> { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 4290774380558885855L; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value which the receiver represents. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final long value; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the maximum {@code long} value, 2<sup>63</sup>-1. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final long MAX_VALUE = 0x7FFFFFFFFFFFFFFFL; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the minimum {@code long} value, -2<sup>63</sup>. 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final long MIN_VALUE = 0x8000000000000000L; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@link Class} object that represents the primitive type {@code long}. 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 56726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static final Class<Long> TYPE 57726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch = (Class<Long>) long[].class.getComponentType(); 58726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Note: Long.TYPE can't be set to "long.class", since *that* is 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // defined to be "java.lang.Long.TYPE"; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constant for the number of bits needed to represent a {@code long} in 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * two's complement form. 64f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 65f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SIZE = 64; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /** 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code Long} with the specified primitive long value. 71726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the primitive long value to store in the new instance. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Long(long value) { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.value = value; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code Long} from the specified string. 81726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 858890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseLong(String) 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Long(String string) throws NumberFormatException { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(parseLong(string)); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte byteValue() { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (byte) value; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this object to the specified long object to determine their 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * relative order. 100726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long object to compare this object to. 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a negative value if the value of this long is less than the value 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of {@code object}; 0 if the value of this long and the value of 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code object} are equal; a positive value if the value of this 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * long is greater than the value of {@code object}. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Comparable 108f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.2 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int compareTo(Long object) { 111c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes return compare(value, object.value); 112c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes } 113c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes 114c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes /** 115c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * Compares two {@code long} values. 116c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * @return 0 if lhs = rhs, less than 0 if lhs < rhs, and greater than 0 if lhs > rhs. 117c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * @since 1.7 118c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes */ 119c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes public static int compare(long lhs, long rhs) { 120c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1231f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes private static NumberFormatException invalidLong(String s) { 1241f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid long: \"" + s + "\""); 1251f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 1261f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string and returns a {@code Long} instance if the 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string can be decoded into a long value. The string may be an optional 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * minus sign "-" followed by a hexadecimal ("0x..." or "#..."), octal 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ("0..."), or decimal ("...") representation of a long. 132726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a string representation of a long value. 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} containing the value represented by {@code string}. 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 1378890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long decode(String string) throws NumberFormatException { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 1421f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char firstDigit = string.charAt(i); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = firstDigit == '-'; 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative) { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 1) { 1481f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project firstDigit = string.charAt(++i); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int base = 10; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (firstDigit == '0') { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (++i == length) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(0L); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((firstDigit = string.charAt(i)) == 'x' || firstDigit == 'X') { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == length) { 1601f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 8; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (firstDigit == '#') { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == length) { 1691f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++; 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long result = parse(string, i, base, negative); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(result); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double doubleValue() { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this instance with the specified object and indicates if they 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are equal. In order to be equal, {@code o} must be an instance of 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Long} and have the same long value as this object. 188726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param o 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare this long with. 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Long}; {@code false} otherwise. 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object o) { 1960d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes return (o instanceof Long) && (((Long) o).value == value); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float floatValue() { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns {@code null} if {@code string} is {@code null} 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or empty, if the property can not be found or if its value can not be 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsed as a long. 209726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or {@code null}. 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string) { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as a long. 234726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no long system 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * property with the requested name. 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or the default 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string, long defaultValue) { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as a long. 263726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no long system 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * property with the requested name. 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or the default 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string, Long defaultValue) { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (int) (value ^ (value >>> 32)); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int intValue() { 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (int) value; 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the primitive value of this long. 299726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this object's primitive value. 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long longValue() { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal long value. The ASCII 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character \u002d ('-') is recognized as the minus sign. 310726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive long value represented by {@code string}. 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3158890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static long parseLong(String string) throws NumberFormatException { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parseLong(string, 10); 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 long value using the specified 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. The ASCII character \u002d ('-') is recognized as the minus sign. 324726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive long value represented by {@code string} using 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code radix}. 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3328890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value, or 3338890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * {@code radix < Character.MIN_RADIX || 3348890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 33682a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes public static long parseLong(String string, int radix) throws NumberFormatException { 3371f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) { 3381f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid radix: " + radix); 3391f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 3401f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (string == null) { 3411f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 3451f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = string.charAt(i) == '-'; 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative && ++i == length) { 3491f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, i, radix, negative); 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35582a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes private static long parse(String string, int offset, int radix, boolean negative) { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long max = Long.MIN_VALUE / radix; 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long result = 0, length = string.length(); 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (offset < length) { 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int digit = Character.digit(string.charAt(offset++), radix); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (digit == -1) { 3611f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (max > result) { 3641f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long next = result * radix - digit; 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (next > result) { 3681f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = next; 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!negative) { 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = -result; 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result < 0) { 3751f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short shortValue() { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (short) value; 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its binary string representation. 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of '0' and '1' characters. 389726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 390726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 39282a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes * @return the binary string representation of {@code v}. 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 394726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toBinaryString(long v) { 39582a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToBinaryString(v); 39682a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes } 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its hexadecimal string 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation. The returned string is a concatenation of characters from 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * '0' to '9' and 'a' to 'f'. 402726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 403726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hexadecimal string representation of {@code l}. 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 407726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toHexString(long v) { 40882a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToHexString(v); 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its octal string representation. 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of characters from '0' to '7'. 414726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 415726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the octal string representation of {@code l}. 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 419726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toOctalString(long v) { 42082a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToOctalString(v); 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Long.toString(value); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its decimal string representation. 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of a minus sign if the number is 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * negative and characters from '0' to '9'. 432726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 433726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param n 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to convert. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the decimal string representation of {@code l}. 436f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 437726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toString(long n) { 43882a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToString(n); 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 442438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Converts the specified signed long value into a string representation based on 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified radix. The returned string is a concatenation of a minus 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sign if the number is negative and characters from '0' to '9' and 'a' to 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 'z', depending on the radix. If {@code radix} is not in the interval 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by {@code Character.MIN_RADIX} and {@code Character.MAX_RADIX} 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then 10 is used as the base for the conversion. 448f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 449438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * <p>This method treats its argument as signed. If you want to convert an 450438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * unsigned value to one of the common non-decimal bases, you may find 451438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * {@link #toBinaryString}, {@code #toHexString}, or {@link #toOctalString} 452438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * more convenient. 453726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 454726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 455438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * the signed long to convert. 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the base to use for the conversion. 458726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the string representation of {@code v}. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 460726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toString(long v, int radix) { 46182a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToString(v, radix); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal long value. 466726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} instance containing the long value represented by 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 4728890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseLong(String) 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long valueOf(String string) throws NumberFormatException { 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseLong(string)); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed long value using the specified 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. 482726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} instance containing the long value represented by 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} using {@code radix}. 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 4908890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value, or 4918890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * {@code radix < Character.MIN_RADIX || 4928890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseLong(String, int) 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 49582a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes public static Long valueOf(String string, int radix) throws NumberFormatException { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseLong(string, radix)); 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the highest (leftmost) bit of the specified long value that is 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1 and returns the bit mask value for that bit. This is also referred to 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as the Most Significant 1 Bit. Returns zero if the specified long is 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zero. 504726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 505726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 507726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the bit mask indicating the highest 1 bit in {@code v}. 508f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 510726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long highestOneBit(long v) { 511726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight, Figure 3-1 512726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 1); 513726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 2); 514726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 4); 515726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 8); 516726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 16); 517726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 32); 518726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v - (v >>> 1); 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the lowest (rightmost) bit of the specified long value that is 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1 and returns the bit mask value for that bit. This is also referred to 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as the Least Significant 1 Bit. Returns zero if the specified long is 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zero. 526726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 527726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 529726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the bit mask indicating the lowest 1 bit in {@code v}. 530f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 532726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long lowestOneBit(long v) { 533726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v & -v; 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of leading zeros in the specified long value prior 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link #highestOneBit(long) highest one bit}. 539f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 540726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 542726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of leading zeros in {@code v}. 543f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 545726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int numberOfLeadingZeros(long v) { 546726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // After Hacker's Delight, Figure 5-6 547726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (v < 0) { 548726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return 0; 549726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 550726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (v == 0) { 551726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return 64; 552726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 553726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // On a 64-bit VM, the two previous tests should probably be replaced by 554726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // if (v <= 0) return ((int) (~v >> 57)) & 64; 555726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 556726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int n = 1; 557726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int i = (int) (v >>> 32); 558726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i == 0) { 559726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 32; 560726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = (int) v; 561726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5629e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 16 == 0) { 563726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 16; 564726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 16; 565726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5669e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 24 == 0) { 567726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 8; 568726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 8; 569726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5709e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 28 == 0) { 571726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 4; 572726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 4; 573726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5749e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 30 == 0) { 575726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 2; 576726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 2; 577726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 578726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return n - (i >>> 31); 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of trailing zeros in the specified long value after 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@link #lowestOneBit(long) lowest one bit}. 584f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 585726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 587726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of trailing zeros in {@code v}. 588f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 590726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int numberOfTrailingZeros(long v) { 591726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int low = (int) v; 592726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return low !=0 ? Integer.numberOfTrailingZeros(low) 593726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch : 32 + Integer.numberOfTrailingZeros((int) (v >>> 32)); 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 long value; this is also 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referred to as population count. 599f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 600726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 602726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of 1 bits in {@code v}. 603f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 605726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int bitCount(long v) { 606726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Combines techniques from several sources 607726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v -= (v >>> 1) & 0x5555555555555555L; 6089e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = (v & 0x3333333333333333L) + ((v >>> 2) & 0x3333333333333333L); 609726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int i = ((int)(v >>> 32)) + (int) v; 6109e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch i = (i & 0x0F0F0F0F) + ((i >>> 4) & 0x0F0F0F0F); 611726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >>> 8; 612726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >>> 16; 613726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i & 0x0000007F; 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 616726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /* 617726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * On a modern 64-bit processor with a fast hardware multiply, this is 618726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * much faster (assuming you're running a 64-bit VM): 619726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 620726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * // http://chessprogramming.wikispaces.com/Population+Count 621726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * int bitCount (long x) { 622726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x -= (x >>> 1) & 0x5555555555555555L; 623726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x & 0x3333333333333333L) + ((x >>> 2) & 0x3333333333333333L); 624726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x + (x >>> 4)) & 0x0f0f0f0f0f0f0f0fL; 625726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x * 0x0101010101010101L) >>> 56; 626726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * return (int) x; 627726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * } 628726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 629726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Really modern processors (e.g., Nehalem, K-10) have hardware popcount 630726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * instructions. 631726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 632726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified long value to the left by the specified 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of bits. 636f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 637726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to rotate left. 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 642f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 644726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long rotateLeft(long v, int distance) { 645726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 64 (JLS3 15.19), so we needn't mask -distance 646726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (v << distance) | (v >>> -distance); 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified long value to the right by the 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified number of bits. 652f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 653726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to rotate right. 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 658f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 660726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long rotateRight(long v, int distance) { 661726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 64 (JLS3 15.19), so we needn't mask -distance 662726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (v >>> distance) | (v << -distance); 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bytes of the specified long value. 667726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 668726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value for which to reverse the byte order. 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 671f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 673726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long reverseBytes(long v) { 674726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 675726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 6769e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 8) & 0x00FF00FF00FF00FFL) | ((v & 0x00FF00FF00FF00FFL) << 8); 6779e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>>16) & 0x0000FFFF0000FFFFL) | ((v & 0x0000FFFF0000FFFFL) <<16); 6789e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch return ((v >>>32) ) | ((v ) <<32); 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bits of the specified long value. 683726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 684726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value for which to reverse the bit order. 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 687f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 689726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long reverse(long v) { 690726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 691726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 6929e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 1) & 0x5555555555555555L) | ((v & 0x5555555555555555L) << 1); 6939e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 2) & 0x3333333333333333L) | ((v & 0x3333333333333333L) << 2); 6949e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 4) & 0x0F0F0F0F0F0F0F0FL) | ((v & 0x0F0F0F0F0F0F0F0FL) << 4); 6959e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 8) & 0x00FF00FF00FF00FFL) | ((v & 0x00FF00FF00FF00FFL) << 8); 6969e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>>16) & 0x0000FFFF0000FFFFL) | ((v & 0x0000FFFF0000FFFFL) <<16); 6979e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch return ((v >>>32) ) | ((v ) <<32); 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the {@code signum} function for the specified long 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 703726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 704726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to check. 706726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return -1 if {@code v} is negative, 1 if {@code v} is positive, 0 if 707726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * {@code v} is zero. 708f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 710726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int signum(long v) { 711726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v < 0 ? -1 : (v == 0 ? 0 : 1); 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code Long} instance for the specified long value. 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If it is not necessary to get a new {@code Long} instance, it is 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * recommended to use this method instead of the constructor, since it 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maintains a cache of instances which may result in better performance. 720f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 721726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to store in the instance. 723726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return a {@code Long} instance containing {@code v}. 724f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 726726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static Long valueOf(long v) { 7270d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes return v >= 128 || v < -128 ? new Long(v) : SMALL_VALUES[((int) v) + 128]; 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 730726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /** 731726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * A cache of instances used by {@link Long#valueOf(long)} and auto-boxing. 732726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 733726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch private static final Long[] SMALL_VALUES = new Long[256]; 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 735726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch static { 7360d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes for (int i = -128; i < 128; i++) { 737726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch SMALL_VALUES[i + 128] = new Long(i); 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 741