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 * @hide 1.7 119c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes */ 120c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes public static int compare(long lhs, long rhs) { 121c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes return lhs < rhs ? -1 : (lhs == rhs ? 0 : 1); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1241f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes private static NumberFormatException invalidLong(String s) { 1251f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid long: \"" + s + "\""); 1261f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 1271f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string and returns a {@code Long} instance if the 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string can be decoded into a long value. The string may be an optional 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * minus sign "-" followed by a hexadecimal ("0x..." or "#..."), octal 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ("0..."), or decimal ("...") representation of a long. 133726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a string representation of a long value. 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} containing the value represented by {@code string}. 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 1388890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long decode(String string) throws NumberFormatException { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 1431f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char firstDigit = string.charAt(i); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = firstDigit == '-'; 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative) { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 1) { 1491f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project firstDigit = string.charAt(++i); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int base = 10; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (firstDigit == '0') { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (++i == length) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(0L); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((firstDigit = string.charAt(i)) == 'x' || firstDigit == 'X') { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == length) { 1611f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 8; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (firstDigit == '#') { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == length) { 1701f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project base = 16; 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long result = parse(string, i, base, negative); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(result); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public double doubleValue() { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this instance with the specified object and indicates if they 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are equal. In order to be equal, {@code o} must be an instance of 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Long} and have the same long value as this object. 189726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param o 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare this long with. 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Long}; {@code false} otherwise. 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object o) { 1970d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes return (o instanceof Long) && (((Long) o).value == value); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public float floatValue() { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns {@code null} if {@code string} is {@code null} 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or empty, if the property can not be found or if its value can not be 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsed as a long. 210726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or {@code null}. 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as a long. 235726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no long system 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * property with the requested name. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or the default 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string, long defaultValue) { 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(defaultValue); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Long} value of the system property identified by 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. Returns the specified default value if {@code string} is 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} or empty, if the property can not be found or if its value 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be parsed as a long. 264726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the requested system property. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the default value that is returned if there is no long system 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * property with the requested name. 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the requested property's value as a {@code Long} or the default 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long getLong(String string, Long defaultValue) { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (string == null || string.length() == 0) { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prop = System.getProperty(string); 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prop == null) { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return decode(prop); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NumberFormatException ex) { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return defaultValue; 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (int) (value ^ (value >>> 32)); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int intValue() { 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (int) value; 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the primitive value of this long. 300726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return this object's primitive value. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long longValue() { 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal long value. The ASCII 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character \u002d ('-') is recognized as the minus sign. 311726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive long value represented by {@code string}. 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3168890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static long parseLong(String string) throws NumberFormatException { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parseLong(string, 10); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed long value using the specified 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. The ASCII character \u002d ('-') is recognized as the minus sign. 325726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the primitive long value represented by {@code string} using 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code radix}. 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 3338890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value, or 3348890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * {@code radix < Character.MIN_RADIX || 3358890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 33782a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes public static long parseLong(String string, int radix) throws NumberFormatException { 3381f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) { 3391f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw new NumberFormatException("Invalid radix: " + radix); 3401f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes } 3411f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes if (string == null) { 3421f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = string.length(), i = 0; 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length == 0) { 3461f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean negative = string.charAt(i) == '-'; 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (negative && ++i == length) { 3501f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, i, radix, negative); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35682a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes private static long parse(String string, int offset, int radix, boolean negative) { 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long max = Long.MIN_VALUE / radix; 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long result = 0, length = string.length(); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (offset < length) { 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int digit = Character.digit(string.charAt(offset++), radix); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (digit == -1) { 3621f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (max > result) { 3651f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long next = result * radix - digit; 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (next > result) { 3691f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = next; 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!negative) { 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = -result; 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result < 0) { 3761f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes throw invalidLong(string); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public short shortValue() { 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (short) value; 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its binary string representation. 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of '0' and '1' characters. 390726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 391726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 39382a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes * @return the binary string representation of {@code v}. 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 395726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toBinaryString(long v) { 39682a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToBinaryString(v); 39782a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes } 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its hexadecimal string 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation. The returned string is a concatenation of characters from 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * '0' to '9' and 'a' to 'f'. 403726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 404726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hexadecimal string representation of {@code l}. 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 408726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toHexString(long v) { 40982a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToHexString(v); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its octal string representation. 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of characters from '0' to '7'. 415726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 416726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to convert. 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the octal string representation of {@code l}. 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 420726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toOctalString(long v) { 42182a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToOctalString(v); 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return Long.toString(value); 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Converts the specified long value into its decimal string representation. 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The returned string is a concatenation of a minus sign if the number is 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * negative and characters from '0' to '9'. 433726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 434726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param n 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to convert. 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the decimal string representation of {@code l}. 437f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson */ 438726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toString(long n) { 43982a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToString(n); 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 443438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * Converts the specified signed long value into a string representation based on 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified radix. The returned string is a concatenation of a minus 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sign if the number is negative and characters from '0' to '9' and 'a' to 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 'z', depending on the radix. If {@code radix} is not in the interval 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by {@code Character.MIN_RADIX} and {@code Character.MAX_RADIX} 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then 10 is used as the base for the conversion. 449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 450438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * <p>This method treats its argument as signed. If you want to convert an 451438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * unsigned value to one of the common non-decimal bases, you may find 452438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * {@link #toBinaryString}, {@code #toHexString}, or {@link #toOctalString} 453438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * more convenient. 454726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 455726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 456438d9883775e6ee31c097e2103a25571d2426cd9Elliott Hughes * the signed long to convert. 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the base to use for the conversion. 459726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the string representation of {@code v}. 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 461726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static String toString(long v, int radix) { 46282a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes return IntegralToString.longToString(v, radix); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed decimal long value. 467726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} instance containing the long value represented by 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string}. 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 4738890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value. 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseLong(String) 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Long valueOf(String string) throws NumberFormatException { 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseLong(string)); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses the specified string as a signed long value using the specified 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * radix. 483726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string representation of a long value. 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param radix 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the radix to use when parsing. 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Long} instance containing the long value represented by 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} using {@code radix}. 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NumberFormatException 4918890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * if {@code string} cannot be parsed as a long value, or 4928890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * {@code radix < Character.MIN_RADIX || 4938890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes * radix > Character.MAX_RADIX}. 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parseLong(String, int) 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 49682a495ad44d76aac37f54bbbe7c31608d1054f84Elliott Hughes public static Long valueOf(String string, int radix) throws NumberFormatException { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return valueOf(parseLong(string, radix)); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the highest (leftmost) bit of the specified long value that is 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1 and returns the bit mask value for that bit. This is also referred to 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as the Most Significant 1 Bit. Returns zero if the specified long is 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zero. 505726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 506726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 508726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the bit mask indicating the highest 1 bit in {@code v}. 509f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 511726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long highestOneBit(long v) { 512726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight, Figure 3-1 513726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 1); 514726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 2); 515726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 4); 516726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 8); 517726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 16); 518726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v |= (v >> 32); 519726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v - (v >>> 1); 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the lowest (rightmost) bit of the specified long value that is 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1 and returns the bit mask value for that bit. This is also referred to 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as the Least Significant 1 Bit. Returns zero if the specified long is 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zero. 527726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 528726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 530726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the bit mask indicating the lowest 1 bit in {@code v}. 531f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 533726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long lowestOneBit(long v) { 534726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v & -v; 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of leading zeros in the specified long value prior 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link #highestOneBit(long) highest one bit}. 540f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 541726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 543726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of leading zeros in {@code v}. 544f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 546726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int numberOfLeadingZeros(long v) { 547726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // After Hacker's Delight, Figure 5-6 548726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (v < 0) { 549726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return 0; 550726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 551726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (v == 0) { 552726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return 64; 553726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 554726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // On a 64-bit VM, the two previous tests should probably be replaced by 555726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // if (v <= 0) return ((int) (~v >> 57)) & 64; 556726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 557726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int n = 1; 558726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int i = (int) (v >>> 32); 559726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch if (i == 0) { 560726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 32; 561726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i = (int) v; 562726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5639e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 16 == 0) { 564726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 16; 565726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 16; 566726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5679e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 24 == 0) { 568726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 8; 569726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 8; 570726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5719e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 28 == 0) { 572726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 4; 573726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 4; 574726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 5759e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch if (i >>> 30 == 0) { 576726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch n += 2; 577726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i <<= 2; 578726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch } 579726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return n - (i >>> 31); 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines the number of trailing zeros in the specified long value after 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@link #lowestOneBit(long) lowest one bit}. 585f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 586726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 588726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of trailing zeros in {@code v}. 589f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 591726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int numberOfTrailingZeros(long v) { 592726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int low = (int) v; 593726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return low !=0 ? Integer.numberOfTrailingZeros(low) 594726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch : 32 + Integer.numberOfTrailingZeros((int) (v >>> 32)); 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Counts the number of 1 bits in the specified long value; this is also 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * referred to as population count. 600f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 601726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long to examine. 603726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return the number of 1 bits in {@code v}. 604f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 606726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int bitCount(long v) { 607726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Combines techniques from several sources 608726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch v -= (v >>> 1) & 0x5555555555555555L; 6099e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = (v & 0x3333333333333333L) + ((v >>> 2) & 0x3333333333333333L); 610726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch int i = ((int)(v >>> 32)) + (int) v; 6119e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch i = (i & 0x0F0F0F0F) + ((i >>> 4) & 0x0F0F0F0F); 612726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >>> 8; 613726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch i += i >>> 16; 614726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return i & 0x0000007F; 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 617726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /* 618726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * On a modern 64-bit processor with a fast hardware multiply, this is 619726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * much faster (assuming you're running a 64-bit VM): 620726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 621726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * // http://chessprogramming.wikispaces.com/Population+Count 622726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * int bitCount (long x) { 623726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x -= (x >>> 1) & 0x5555555555555555L; 624726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x & 0x3333333333333333L) + ((x >>> 2) & 0x3333333333333333L); 625726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x + (x >>> 4)) & 0x0f0f0f0f0f0f0f0fL; 626726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * x = (x * 0x0101010101010101L) >>> 56; 627726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * return (int) x; 628726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * } 629726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 630726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * Really modern processors (e.g., Nehalem, K-10) have hardware popcount 631726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * instructions. 632726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 633726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified long value to the left by the specified 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * number of bits. 637f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 638726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to rotate left. 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 643f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 645726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long rotateLeft(long v, int distance) { 646726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 64 (JLS3 15.19), so we needn't mask -distance 647726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (v << distance) | (v >>> -distance); 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rotates the bits of the specified long value to the right by the 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified number of bits. 653f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 654726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to rotate right. 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param distance 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the number of bits to rotate. 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the rotated value. 659f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 661726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long rotateRight(long v, int distance) { 662726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Shift distances are mod 64 (JLS3 15.19), so we needn't mask -distance 663726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return (v >>> distance) | (v << -distance); 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bytes of the specified long value. 668726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 669726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value for which to reverse the byte order. 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 672f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 674726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long reverseBytes(long v) { 675726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 676726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 6779e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 8) & 0x00FF00FF00FF00FFL) | ((v & 0x00FF00FF00FF00FFL) << 8); 6789e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>>16) & 0x0000FFFF0000FFFFL) | ((v & 0x0000FFFF0000FFFFL) <<16); 6799e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch return ((v >>>32) ) | ((v ) <<32); 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reverses the order of the bits of the specified long value. 684726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 685726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value for which to reverse the bit order. 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the reversed value. 688f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 690726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static long reverse(long v) { 691726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // Hacker's Delight 7-1, with minor tweak from Veldmeijer 692726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch // http://graphics.stanford.edu/~seander/bithacks.html 6939e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 1) & 0x5555555555555555L) | ((v & 0x5555555555555555L) << 1); 6949e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 2) & 0x3333333333333333L) | ((v & 0x3333333333333333L) << 2); 6959e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 4) & 0x0F0F0F0F0F0F0F0FL) | ((v & 0x0F0F0F0F0F0F0F0FL) << 4); 6969e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>> 8) & 0x00FF00FF00FF00FFL) | ((v & 0x00FF00FF00FF00FFL) << 8); 6979e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch v = ((v >>>16) & 0x0000FFFF0000FFFFL) | ((v & 0x0000FFFF0000FFFFL) <<16); 6989e13cc8ad982ba191400889bb8e5248a1933d45eJoshua Bloch return ((v >>>32) ) | ((v ) <<32); 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value of the {@code signum} function for the specified long 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 704726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * 705726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to check. 707726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return -1 if {@code v} is negative, 1 if {@code v} is positive, 0 if 708726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * {@code v} is zero. 709f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 711726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static int signum(long v) { 712726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch return v < 0 ? -1 : (v == 0 ? 0 : 1); 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code Long} instance for the specified long value. 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If it is not necessary to get a new {@code Long} instance, it is 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * recommended to use this method instead of the constructor, since it 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maintains a cache of instances which may result in better performance. 721f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 722726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @param v 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the long value to store in the instance. 724726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * @return a {@code Long} instance containing {@code v}. 725f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 727726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch public static Long valueOf(long v) { 7280d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes return v >= 128 || v < -128 ? new Long(v) : SMALL_VALUES[((int) v) + 128]; 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 731726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch /** 732726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch * A cache of instances used by {@link Long#valueOf(long)} and auto-boxing. 733726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch */ 734726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch private static final Long[] SMALL_VALUES = new Long[256]; 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 736726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch static { 7370d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes for (int i = -128; i < 128; i++) { 738726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch SMALL_VALUES[i + 128] = new Long(i); 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 742