< prev index next >

src/java.base/share/classes/java/lang/Integer.java

Print this page

        

*** 345,401 **** // assert shift > 0 && shift <=5 : "Illegal shift value"; int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val); int chars = Math.max(((mag + (shift - 1)) / shift), 1); if (COMPACT_STRINGS) { byte[] buf = new byte[chars]; ! formatUnsignedInt(val, shift, buf, chars); return new String(buf, LATIN1); } else { byte[] buf = new byte[chars * 2]; ! formatUnsignedIntUTF16(val, shift, buf, chars); return new String(buf, UTF16); } } /** ! * Format an {@code int} (treated as unsigned) into a byte buffer (LATIN1 version). If * {@code len} exceeds the formatted ASCII representation of {@code val}, * {@code buf} will be padded with leading zeroes. * * @param val the unsigned int to format * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary) ! * @param buf the byte buffer to write to * @param len the number of characters to write */ ! private static void formatUnsignedInt(int val, int shift, byte[] buf, int len) { ! int charPos = len; int radix = 1 << shift; int mask = radix - 1; do { buf[--charPos] = (byte)Integer.digits[val & mask]; val >>>= shift; ! } while (charPos > 0); } ! /** ! * Format an {@code int} (treated as unsigned) into a byte buffer (UTF16 version). If ! * {@code len} exceeds the formatted ASCII representation of {@code val}, ! * {@code buf} will be padded with leading zeroes. ! * ! * @param val the unsigned int to format ! * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary) ! * @param buf the byte buffer to write to ! * @param len the number of characters to write ! */ ! private static void formatUnsignedIntUTF16(int val, int shift, byte[] buf, int len) { ! int charPos = len; int radix = 1 << shift; int mask = radix - 1; do { StringUTF16.putChar(buf, --charPos, Integer.digits[val & mask]); val >>>= shift; ! } while (charPos > 0); } static final byte[] DigitTens = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', --- 345,407 ---- // assert shift > 0 && shift <=5 : "Illegal shift value"; int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val); int chars = Math.max(((mag + (shift - 1)) / shift), 1); if (COMPACT_STRINGS) { byte[] buf = new byte[chars]; ! formatUnsignedInt(val, shift, buf, 0, chars); return new String(buf, LATIN1); } else { byte[] buf = new byte[chars * 2]; ! formatUnsignedIntUTF16(val, shift, buf, 0, chars); return new String(buf, UTF16); } } /** ! * Format an {@code int} (treated as unsigned) into a character buffer. If * {@code len} exceeds the formatted ASCII representation of {@code val}, * {@code buf} will be padded with leading zeroes. * * @param val the unsigned int to format * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary) ! * @param buf the character buffer to write to ! * @param offset the offset in the destination buffer to start at * @param len the number of characters to write */ ! static void formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) { ! // assert shift > 0 && shift <=5 : "Illegal shift value"; ! // assert offset >= 0 && offset < buf.length : "illegal offset"; ! // assert len > 0 && (offset + len) <= buf.length : "illegal length"; ! int charPos = offset + len; ! int radix = 1 << shift; ! int mask = radix - 1; ! do { ! buf[--charPos] = Integer.digits[val & mask]; ! val >>>= shift; ! } while (charPos > offset); ! } ! ! /** byte[]/LATIN1 version */ ! static void formatUnsignedInt(int val, int shift, byte[] buf, int offset, int len) { ! int charPos = offset + len; int radix = 1 << shift; int mask = radix - 1; do { buf[--charPos] = (byte)Integer.digits[val & mask]; val >>>= shift; ! } while (charPos > offset); } ! /** byte[]/UTF16 version */ ! private static void formatUnsignedIntUTF16(int val, int shift, byte[] buf, int offset, int len) { ! int charPos = offset + len; int radix = 1 << shift; int mask = radix - 1; do { StringUTF16.putChar(buf, --charPos, Integer.digits[val & mask]); val >>>= shift; ! } while (charPos > offset); } static final byte[] DigitTens = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
*** 690,700 **** * {@link java.lang.Character#MAX_RADIX}. * @since 9 */ public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { ! Objects.requireNonNull(s); if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) { throw new IndexOutOfBoundsException(); } if (radix < Character.MIN_RADIX) { --- 696,706 ---- * {@link java.lang.Character#MAX_RADIX}. * @since 9 */ public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { ! s = Objects.requireNonNull(s); if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) { throw new IndexOutOfBoundsException(); } if (radix < Character.MIN_RADIX) {
*** 873,883 **** * {@link java.lang.Character#MAX_RADIX}. * @since 9 */ public static int parseUnsignedInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { ! Objects.requireNonNull(s); if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) { throw new IndexOutOfBoundsException(); } int start = beginIndex, len = endIndex - beginIndex; --- 879,889 ---- * {@link java.lang.Character#MAX_RADIX}. * @since 9 */ public static int parseUnsignedInt(CharSequence s, int beginIndex, int endIndex, int radix) throws NumberFormatException { ! s = Objects.requireNonNull(s); if (beginIndex < 0 || beginIndex > endIndex || endIndex > s.length()) { throw new IndexOutOfBoundsException(); } int start = beginIndex, len = endIndex - beginIndex;
< prev index next >