A PHP Error was encountered

Severity: 8192

Message: Function create_function() is deprecated

Filename: geshi/geshi.php

Line Number: 4698

Backtrace:

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4698
Function: _error_handler

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4621
Function: _optimize_regexp_list_tokens_to_string

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 1655
Function: optimize_regexp_list

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2029
Function: optimize_keyword_group

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2168
Function: build_parse_cache

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/Process.php
Line: 45
Function: parse_code

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/models/Pastes.php
Line: 517
Function: syntax

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/controllers/Main.php
Line: 693
Function: getPaste

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/index.php
Line: 315
Function: require_once

Re: Re: Untitled - Stikked
From Big Stork, 10 Years ago, written in Java.
This paste is a reply to Re: Untitled from Beige Tern - view diff
Embed
  1. /*
  2.  * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
  3.  * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  4.  *
  5.  *
  6.  *
  7.  *
  8.  *
  9.  *
  10.  *
  11.  *
  12.  *
  13.  *
  14.  *
  15.  *
  16.  *
  17.  *
  18.  *
  19.  *
  20.  *
  21.  *
  22.  *
  23.  *
  24.  */
  25.  
  26. package java.lang;
  27.  
  28. import java.util.Properties;
  29.  
  30. /**
  31.  * The {@code Integer} class wraps a value of the primitive type
  32.  * {@code int} in an object. An object of type {@code Integer}
  33.  * contains a single field whose type is {@code int}.
  34.  *
  35.  * <p>In addition, this class provides several methods for converting
  36.  * an {@code int} to a {@code String} and a {@code String} to an
  37.  * {@code int}, as well as other constants and methods useful when
  38.  * dealing with an {@code int}.
  39.  *
  40.  * <p>Implementation note: The implementations of the "bit twiddling"
  41.  * methods (such as {@link #highestOneBit(int) highestOneBit} and
  42.  * {@link #numberOfTrailingZeros(int) numberOfTrailingZeros}) are
  43.  * based on material from Henry S. Warren, Jr.'s <i>Hacker's
  44.  * Delight</i>, (Addison Wesley, 2002).
  45.  *
  46.  * @author  Lee Boynton
  47.  * @author  Arthur van Hoff
  48.  * @author  Josh Bloch
  49.  * @author  Joseph D. Darcy
  50.  * @since JDK1.0
  51.  */
  52. Http://youtube.com
  53. public final class Integer extends Number implements Comparable<Integer> {
  54.     /**
  55.      * A constant holding the minimum value an {@code int} can
  56.      * have, -2<sup>31</sup>.
  57.      */
  58.     public static final int   MIN_VALUE = 0x80000000;
  59.  
  60.     /**
  61.      * A constant holding the maximum value an {@code int} can
  62.      * have, 2<sup>31</sup>-1.
  63.      */
  64.     public static final int   MAX_VALUE = 0x7fffffff;
  65.  
  66.     /**
  67.      * The {@code Class} instance representing the primitive type
  68.      * {@code int}.
  69.      *
  70.      * @since   JDK1.1
  71.      */
  72.     public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
  73.  
  74.     /**
  75.      * All possible chars for representing a number as a String
  76.      */
  77.     final static char[] digits = {
  78.         '0' , '1' , '2' , '3' , '4' , '5' ,
  79.         '6' , '7' , '8' , '9' , 'a' , 'b' ,
  80.         'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
  81.         'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
  82.         'o' , 'p' , 'q' , 'r' , 's' , 't' ,
  83.         'u' , 'v' , 'w' , 'x' , 'y' , 'z'
  84.     };
  85.  
  86.     /**
  87.      * Returns a string representation of the first argument in the
  88.      * radix specified by the second argument.
  89.      *
  90.      * <p>If the radix is smaller than {@code Character.MIN_RADIX}
  91.      * or larger than {@code Character.MAX_RADIX}, then the radix
  92.      * {@code 10} is used instead.
  93.      *
  94.      * <p>If the first argument is negative, the first element of the
  95.      * result is the ASCII minus character {@code '-'}
  96.      * (<code>'&#92;u002D'</code>). If the first argument is not
  97.      * negative, no sign character appears in the result.
  98.      *
  99.      * <p>The remaining characters of the result represent the magnitude
  100.      * of the first argument. If the magnitude is zero, it is
  101.      * represented by a single zero character {@code '0'}
  102.      * (<code>'&#92;u0030'</code>); otherwise, the first character of
  103.      * the representation of the magnitude will not be the zero
  104.      * character.  The following ASCII characters are used as digits:
  105.      *
  106.      * <blockquote>
  107.      *   {@code 0123456789abcdefghijklmnopqrstuvwxyz}
  108.      * </blockquote>
  109.      *
  110.      * These are <code>'&#92;u0030'</code> through
  111.      * <code>'&#92;u0039'</code> and <code>'&#92;u0061'</code> through
  112.      * <code>'&#92;u007A'</code>. If {@code radix} is
  113.      * <var>N</var>, then the first <var>N</var> of these characters
  114.      * are used as radix-<var>N</var> digits in the order shown. Thus,
  115.      * the digits for hexadecimal (radix 16) are
  116.      * {@code 0123456789abcdef}. If uppercase letters are
  117.      * desired, the {@link java.lang.String#toUpperCase()} method may
  118.      * be called on the result:
  119.      *
  120.      * <blockquote>
  121.      *  {@code Integer.toString(n, 16).toUpperCase()}
  122.      * </blockquote>
  123.      *
  124.      * @param   i       an integer to be converted to a string.
  125.      * @param   radix   the radix to use in the string representation.
  126.      * @return  a string representation of the argument in the specified radix.
  127.      * @see     java.lang.Character#MAX_RADIX
  128.      * @see     java.lang.Character#MIN_RADIX
  129.      */
  130.     public static String toString(int i, int radix) {
  131.  
  132.         if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
  133.             radix = 10;
  134.  
  135.         /* Use the faster version */
  136.         if (radix == 10) {
  137.             return toString(i);
  138.         }
  139.  
  140.         char buf[] = new char[33];
  141.         boolean negative = (i < 0);
  142.         int charPos = 32;
  143.  
  144.         if (!negative) {
  145.             i = -i;
  146.         }
  147.  
  148.         while (i <= -radix) {
  149.             buf[charPos--] = digits[-(i % radix)];
  150.             i = i / radix;
  151.         }
  152.         buf[charPos] = digits[-i];
  153.  
  154.         if (negative) {
  155.             buf[--charPos] = '-';
  156.         }
  157.  
  158.         return new String(buf, charPos, (33 - charPos));
  159.     }
  160.  
  161.     /**
  162.      * Returns a string representation of the integer argument as an
  163.      * unsigned integer in base&nbsp;16.
  164.      *
  165.      * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
  166.      * if the argument is negative; otherwise, it is equal to the
  167.      * argument.  This value is converted to a string of ASCII digits
  168.      * in hexadecimal (base&nbsp;16) with no extra leading
  169.      * {@code 0}s. If the unsigned magnitude is zero, it is
  170.      * represented by a single zero character {@code '0'}
  171.      * (<code>'&#92;u0030'</code>); otherwise, the first character of
  172.      * the representation of the unsigned magnitude will not be the
  173.      * zero character. The following characters are used as
  174.      * hexadecimal digits:
  175.      *
  176.      * <blockquote>
  177.      *  {@code 0123456789abcdef}
  178.      * </blockquote>
  179.      *
  180.      * These are the characters <code>'&#92;u0030'</code> through
  181.      * <code>'&#92;u0039'</code> and <code>'&#92;u0061'</code> through
  182.      * <code>'&#92;u0066'</code>. If uppercase letters are
  183.      * desired, the {@link java.lang.String#toUpperCase()} method may
  184.      * be called on the result:
  185.      *
  186.      * <blockquote>
  187.      *  {@code Integer.toHexString(n).toUpperCase()}
  188.      * </blockquote>
  189.      *
  190.      * @param   i   an integer to be converted to a string.
  191.      * @return  the string representation of the unsigned integer value
  192.      *          represented by the argument in hexadecimal (base&nbsp;16).
  193.      * @since   JDK1.0.2
  194.      */
  195.     public static String toHexString(int i) {
  196.         return toUnsignedString(i, 4);
  197.     }
  198.  
  199.     /**
  200.      * Returns a string representation of the integer argument as an
  201.      * unsigned integer in base&nbsp;8.
  202.      *
  203.      * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
  204.      * if the argument is negative; otherwise, it is equal to the
  205.      * argument.  This value is converted to a string of ASCII digits
  206.      * in octal (base&nbsp;8) with no extra leading {@code 0}s.
  207.      *
  208.      * <p>If the unsigned magnitude is zero, it is represented by a
  209.      * single zero character {@code '0'}
  210.      * (<code>'&#92;u0030'</code>); otherwise, the first character of
  211.      * the representation of the unsigned magnitude will not be the
  212.      * zero character. The following characters are used as octal
  213.      * digits:
  214.      *
  215.      * <blockquote>
  216.      * {@code 01234567}
  217.      * </blockquote>
  218.      *
  219.      * These are the characters <code>'&#92;u0030'</code> through
  220.      * <code>'&#92;u0037'</code>.
  221.      *
  222.      * @param   i   an integer to be converted to a string.
  223.      * @return  the string representation of the unsigned integer value
  224.      *          represented by the argument in octal (base&nbsp;8).
  225.      * @since   JDK1.0.2
  226.      */
  227.     public static String toOctalString(int i) {
  228.         return toUnsignedString(i, 3);
  229.     }
  230.  
  231.     /**
  232.      * Returns a string representation of the integer argument as an
  233.      * unsigned integer in base&nbsp;2.
  234.      *
  235.      * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
  236.      * if the argument is negative; otherwise it is equal to the
  237.      * argument.  This value is converted to a string of ASCII digits
  238.      * in binary (base&nbsp;2) with no extra leading {@code 0}s.
  239.      * If the unsigned magnitude is zero, it is represented by a
  240.      * single zero character {@code '0'}
  241.      * (<code>'&#92;u0030'</code>); otherwise, the first character of
  242.      * the representation of the unsigned magnitude will not be the
  243.      * zero character. The characters {@code '0'}
  244.      * (<code>'&#92;u0030'</code>) and {@code '1'}
  245.      * (<code>'&#92;u0031'</code>) are used as binary digits.
  246.      *
  247.      * @param   i   an integer to be converted to a string.
  248.      * @return  the string representation of the unsigned integer value
  249.      *          represented by the argument in binary (base&nbsp;2).
  250.      * @since   JDK1.0.2
  251.      */
  252.     public static String toBinaryString(int i) {
  253.         return toUnsignedString(i, 1);
  254.     }
  255.  
  256.     /**
  257.      * Convert the integer to an unsigned number.
  258.      */
  259.     private static String toUnsignedString(int i, int shift) {
  260.         char[] buf = new char[32];
  261.         int charPos = 32;
  262.         int radix = 1 << shift;
  263.         int mask = radix - 1;
  264.         do {
  265.             buf[--charPos] = digits[i & mask];
  266.             i >>>= shift;
  267.         } while (i != 0);
  268.  
  269.         return new String(buf, charPos, (32 - charPos));
  270.     }
  271.  
  272.  
  273.     final static char [] DigitTens = {
  274.         '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
  275.         '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
  276.         '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
  277.         '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
  278.         '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
  279.         '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
  280.         '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
  281.         '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
  282.         '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
  283.         '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
  284.         } ;
  285.  
  286.     final static char [] DigitOnes = {
  287.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  288.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  289.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  290.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  291.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  292.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  293.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  294.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  295.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  296.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  297.         } ;
  298.  
  299.         // I use the "invariant division by multiplication" trick to
  300.         // accelerate Integer.toString.  In particular we want to
  301.         // avoid division by 10.
  302.         //
  303.         // The "trick" has roughly the same performance characteristics
  304.         // as the "classic" Integer.toString code on a non-JIT VM.
  305.         // The trick avoids .rem and .div calls but has a longer code
  306.         // path and is thus dominated by dispatch overhead.  In the
  307.         // JIT case the dispatch overhead doesn't exist and the
  308.         // "trick" is considerably faster than the classic code.
  309.         //
  310.         // TODO-FIXME: convert (x * 52429) into the equiv shift-add
  311.         // sequence.
  312.         //
  313.         // RE:  Division by Invariant Integers using Multiplication
  314.         //      T Gralund, P Montgomery
  315.         //      ACM PLDI 1994
  316.         //
  317.  
  318.     /**
  319.      * Returns a {@code String} object representing the
  320.      * specified integer. The argument is converted to signed decimal
  321.      * representation and returned as a string, exactly as if the
  322.      * argument and radix 10 were given as arguments to the {@link
  323.      * #toString(int, int)} method.
  324.      *
  325.      * @param   i   an integer to be converted.
  326.      * @return  a string representation of the argument in base&nbsp;10.
  327.      */
  328.     public static String toString(int i) {
  329.         if (i == Integer.MIN_VALUE)
  330.             return "-2147483648";
  331.         int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
  332.         char[] buf = new char[size];
  333.         getChars(i, size, buf);
  334.         return new String(buf, true);
  335.     }
  336.  
  337.     /**
  338.      * Places characters representing the integer i into the
  339.      * character array buf. The characters are placed into
  340.      * the buffer backwards starting with the least significant
  341.      * digit at the specified index (exclusive), and working
  342.      * backwards from there.
  343.      *
  344.      * Will fail if i == Integer.MIN_VALUE
  345.      */
  346.     static void getChars(int i, int index, char[] buf) {
  347.         int q, r;
  348.         int charPos = index;
  349.         char sign = 0;
  350.  
  351.         if (i < 0) {
  352.             sign = '-';
  353.             i = -i;
  354.         }
  355.  
  356.         // Generate two digits per iteration
  357.         while (i >= 65536) {
  358.             q = i / 100;
  359.         // really: r = i - (q * 100);
  360.             r = i - ((q << 6) + (q << 5) + (q << 2));
  361.             i = q;
  362.             buf [--charPos] = DigitOnes[r];
  363.             buf [--charPos] = DigitTens[r];
  364.         }
  365.  
  366.         // Fall thru to fast mode for smaller numbers
  367.         // assert(i <= 65536, i);
  368.         for (;;) {
  369.             q = (i * 52429) >>> (16+3);
  370.             r = i - ((q << 3) + (q << 1));  // r = i-(q*10) ...
  371.             buf [--charPos] = digits [r];
  372.             i = q;
  373.             if (i == 0) break;
  374.         }
  375.         if (sign != 0) {
  376.             buf [--charPos] = sign;
  377.         }
  378.     }
  379.  
  380.     final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
  381.                                       99999999, 999999999, Integer.MAX_VALUE };
  382.  
  383.     // Requires positive x
  384.     static int stringSize(int x) {
  385.         for (int i=0; ; i++)
  386.             if (x <= sizeTable[i])
  387.                 return i+1;
  388.     }
  389.  
  390.     /**
  391.      * Parses the string argument as a signed integer in the radix
  392.      * specified by the second argument. The characters in the string
  393.      * must all be digits of the specified radix (as determined by
  394.      * whether {@link java.lang.Character#digit(char, int)} returns a
  395.      * nonnegative value), except that the first character may be an
  396.      * ASCII minus sign {@code '-'} (<code>'&#92;u002D'</code>) to
  397.      * indicate a negative value or an ASCII plus sign {@code '+'}
  398.      * (<code>'&#92;u002B'</code>) to indicate a positive value. The
  399.      * resulting integer value is returned.
  400.      *
  401.      * <p>An exception of type {@code NumberFormatException} is
  402.      * thrown if any of the following situations occurs:
  403.      * <ul>
  404.      * <li>The first argument is {@code null} or is a string of
  405.      * length zero.
  406.      *
  407.      * <li>The radix is either smaller than
  408.      * {@link java.lang.Character#MIN_RADIX} or
  409.      * larger than {@link java.lang.Character#MAX_RADIX}.
  410.      *
  411.      * <li>Any character of the string is not a digit of the specified
  412.      * radix, except that the first character may be a minus sign
  413.      * {@code '-'} (<code>'&#92;u002D'</code>) or plus sign
  414.      * {@code '+'} (<code>'&#92;u002B'</code>) provided that the
  415.      * string is longer than length 1.
  416.      *
  417.      * <li>The value represented by the string is not a value of type
  418.      * {@code int}.
  419.      * </ul>
  420.      *
  421.      * <p>Examples:
  422.      * <blockquote><pre>
  423.      * parseInt("0", 10) returns 0
  424.      * parseInt("473", 10) returns 473
  425.      * parseInt("+42", 10) returns 42
  426.      * parseInt("-0", 10) returns 0
  427.      * parseInt("-FF", 16) returns -255
  428.      * parseInt("1100110", 2) returns 102
  429.      * parseInt("2147483647", 10) returns 2147483647
  430.      * parseInt("-2147483648", 10) returns -2147483648
  431.      * parseInt("2147483648", 10) throws a NumberFormatException
  432.      * parseInt("99", 8) throws a NumberFormatException
  433.      * parseInt("Kona", 10) throws a NumberFormatException
  434.      * parseInt("Kona", 27) returns 411787
  435.      * </pre></blockquote>
  436.      *
  437.      * @param      s   the {@code String} containing the integer
  438.      *                  representation to be parsed
  439.      * @param      radix   the radix to be used while parsing {@code s}.
  440.      * @return     the integer represented by the string argument in the
  441.      *             specified radix.
  442.      * @exception  NumberFormatException if the {@code String}
  443.      *             does not contain a parsable {@code int}.
  444.      */
  445.     public static int parseInt(String s, int radix)
  446.                 throws NumberFormatException
  447.     {
  448.         /*
  449.          * WARNING: This method may be invoked early during VM initialization
  450.          * before IntegerCache is initialized. Care must be taken to not use
  451.          * the valueOf method.
  452.          */
  453.  
  454.         if (s == null) {
  455.             throw new NumberFormatException("null");
  456.         }
  457.  
  458.         if (radix < Character.MIN_RADIX) {
  459.             throw new NumberFormatException("radix " + radix +
  460.                                             " less than Character.MIN_RADIX");
  461.         }
  462.  
  463.         if (radix > Character.MAX_RADIX) {
  464.             throw new NumberFormatException("radix " + radix +
  465.                                             " greater than Character.MAX_RADIX");
  466.         }
  467.  
  468.         int result = 0;
  469.         boolean negative = false;
  470.         int i = 0, len = s.length();
  471.         int limit = -Integer.MAX_VALUE;
  472.         int multmin;
  473.         int digit;
  474.  
  475.         if (len > 0) {
  476.             char firstChar = s.charAt(0);
  477.             if (firstChar < '0') { // Possible leading "+" or "-"
  478.                 if (firstChar == '-') {
  479.                     negative = true;
  480.                     limit = Integer.MIN_VALUE;
  481.                 } else if (firstChar != '+')
  482.                     throw NumberFormatException.forInputString(s);
  483.  
  484.                 if (len == 1) // Cannot have lone "+" or "-"
  485.                     throw NumberFormatException.forInputString(s);
  486.                 i++;
  487.             }
  488.             multmin = limit / radix;
  489.             while (i < len) {
  490.                 // Accumulating negatively avoids surprises near MAX_VALUE
  491.                 digit = Character.digit(s.charAt(i++),radix);
  492.                 if (digit < 0) {
  493.                     throw NumberFormatException.forInputString(s);
  494.                 }
  495.                 if (result < multmin) {
  496.                     throw NumberFormatException.forInputString(s);
  497.                 }
  498.                 result *= radix;
  499.                 if (result < limit + digit) {
  500.                     throw NumberFormatException.forInputString(s);
  501.                 }
  502.                 result -= digit;
  503.             }
  504.         } else {
  505.             throw NumberFormatException.forInputString(s);
  506.         }
  507.         return negative ? result : -result;
  508.     }
  509.  
  510.     /**
  511.      * Parses the string argument as a signed decimal integer. The
  512.      * characters in the string must all be decimal digits, except
  513.      * that the first character may be an ASCII minus sign {@code '-'}
  514.      * (<code>'&#92;u002D'</code>) to indicate a negative value or an
  515.      * ASCII plus sign {@code '+'} (<code>'&#92;u002B'</code>) to
  516.      * indicate a positive value. The resulting integer value is
  517.      * returned, exactly as if the argument and the radix 10 were
  518.      * given as arguments to the {@link #parseInt(java.lang.String,
  519.      * int)} method.
  520.      *
  521.      * @param s    a {@code String} containing the {@code int}
  522.      *             representation to be parsed
  523.      * @return     the integer value represented by the argument in decimal.
  524.      * @exception  NumberFormatException  if the string does not contain a
  525.      *               parsable integer.
  526.      */
  527.     public static int parseInt(String s) throws NumberFormatException {
  528.         return parseInt(s,10);
  529.     }
  530.  
  531.     /**
  532.      * Returns an {@code Integer} object holding the value
  533.      * extracted from the specified {@code String} when parsed
  534.      * with the radix given by the second argument. The first argument
  535.      * is interpreted as representing a signed integer in the radix
  536.      * specified by the second argument, exactly as if the arguments
  537.      * were given to the {@link #parseInt(java.lang.String, int)}
  538.      * method. The result is an {@code Integer} object that
  539.      * represents the integer value specified by the string.
  540.      *
  541.      * <p>In other words, this method returns an {@code Integer}
  542.      * object equal to the value of:
  543.      *
  544.      * <blockquote>
  545.      *  {@code new Integer(Integer.parseInt(s, radix))}
  546.      * </blockquote>
  547.      *
  548.      * @param      s   the string to be parsed.
  549.      * @param      radix the radix to be used in interpreting {@code s}
  550.      * @return     an {@code Integer} object holding the value
  551.      *             represented by the string argument in the specified
  552.      *             radix.
  553.      * @exception NumberFormatException if the {@code String}
  554.      *            does not contain a parsable {@code int}.
  555.      */
  556.     public static Integer valueOf(String s, int radix) throws NumberFormatException {
  557.         return Integer.valueOf(parseInt(s,radix));
  558.     }
  559.  
  560.     /**
  561.      * Returns an {@code Integer} object holding the
  562.      * value of the specified {@code String}. The argument is
  563.      * interpreted as representing a signed decimal integer, exactly
  564.      * as if the argument were given to the {@link
  565.      * #parseInt(java.lang.String)} method. The result is an
  566.      * {@code Integer} object that represents the integer value
  567.      * specified by the string.
  568.      *
  569.      * <p>In other words, this method returns an {@code Integer}
  570.      * object equal to the value of:
  571.      *
  572.      * <blockquote>
  573.      *  {@code new Integer(Integer.parseInt(s))}
  574.      * </blockquote>
  575.      *
  576.      * @param      s   the string to be parsed.
  577.      * @return     an {@code Integer} object holding the value
  578.      *             represented by the string argument.
  579.      * @exception  NumberFormatException  if the string cannot be parsed
  580.      *             as an integer.
  581.      */
  582.     public static Integer valueOf(String s) throws NumberFormatException {
  583.         return Integer.valueOf(parseInt(s, 10));
  584.     }
  585.  
  586.     /**
  587.      * Cache to support the object identity semantics of autoboxing for values between
  588.      * -128 and 127 (inclusive) as required by JLS.
  589.      *
  590.      * The cache is initialized on first usage.  The size of the cache
  591.      * may be controlled by the -XX:AutoBoxCacheMax=<size> option.
  592.      * During VM initialization, java.lang.Integer.IntegerCache.high property
  593.      * may be set and saved in the private system properties in the
  594.      * sun.misc.VM class.
  595.      */
  596.  
  597.     private static class IntegerCache {
  598.         static final int low = -128;
  599.         static final int high;
  600.         static final Integer cache[];
  601.  
  602.         static {
  603.             // high value may be configured by property
  604.             int h = 127;
  605.             String integerCacheHighPropValue =
  606.                 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
  607.             if (integerCacheHighPropValue != null) {
  608.                 int i = parseInt(integerCacheHighPropValue);
  609.                 i = Math.max(i, 127);
  610.                 // Maximum array size is Integer.MAX_VALUE
  611.                 h = Math.min(i, Integer.MAX_VALUE - (-low));
  612.             }
  613.             high = h;
  614.  
  615.             cache = new Integer[(high - low) + 1];
  616.             int j = low;
  617.             for(int k = 0; k < cache.length; k++)
  618.                 cache[k] = new Integer(j++);
  619.         }
  620.  
  621.         private IntegerCache() {}
  622.     }
  623.  
  624.     /**
  625.      * Returns an {@code Integer} instance representing the specified
  626.      * {@code int} value.  If a new {@code Integer} instance is not
  627.      * required, this method should generally be used in preference to
  628.      * the constructor {@link #Integer(int)}, as this method is likely
  629.      * to yield significantly better space and time performance by
  630.      * caching frequently requested values.
  631.      *
  632.      * This method will always cache values in the range -128 to 127,
  633.      * inclusive, and may cache other values outside of this range.
  634.      *
  635.      * @param  i an {@code int} value.
  636.      * @return an {@code Integer} instance representing {@code i}.
  637.      * @since  1.5
  638.      */
  639.     public static Integer valueOf(int i) {
  640.         assert IntegerCache.high >= 127;
  641.         if (i >= IntegerCache.low && i <= IntegerCache.high)
  642.             return IntegerCache.cache[i + (-IntegerCache.low)];
  643.         return new Integer(i);
  644.     }
  645.  
  646.     /**
  647.      * The value of the {@code Integer}.
  648.      *
  649.      * @serial
  650.      */
  651.     private final int value;
  652.  
  653.     /**
  654.      * Constructs a newly allocated {@code Integer} object that
  655.      * represents the specified {@code int} value.
  656.      *
  657.      * @param   value   the value to be represented by the
  658.      *                  {@code Integer} object.
  659.      */
  660.     public Integer(int value) {
  661.         this.value = value;
  662.     }
  663.  
  664.     /**
  665.      * Constructs a newly allocated {@code Integer} object that
  666.      * represents the {@code int} value indicated by the
  667.      * {@code String} parameter. The string is converted to an
  668.      * {@code int} value in exactly the manner used by the
  669.      * {@code parseInt} method for radix 10.
  670.      *
  671.      * @param      s   the {@code String} to be converted to an
  672.      *                 {@code Integer}.
  673.      * @exception  NumberFormatException  if the {@code String} does not
  674.      *               contain a parsable integer.
  675.      * @see        java.lang.Integer#parseInt(java.lang.String, int)
  676.      */
  677.     public Integer(String s) throws NumberFormatException {
  678.         this.value = parseInt(s, 10);
  679.     }
  680.  
  681.     /**
  682.      * Returns the value of this {@code Integer} as a
  683.      * {@code byte}.
  684.      */
  685.     public byte byteValue() {
  686.         return (byte)value;
  687.     }
  688.  
  689.     /**
  690.      * Returns the value of this {@code Integer} as a
  691.      * {@code short}.
  692.      */
  693.     public short shortValue() {
  694.         return (short)value;
  695.     }
  696.  
  697.     /**
  698.      * Returns the value of this {@code Integer} as an
  699.      * {@code int}.
  700.      */
  701.     public int intValue() {
  702.         return value;
  703.     }
  704.  
  705.     /**
  706.      * Returns the value of this {@code Integer} as a
  707.      * {@code long}.
  708.      */
  709.     public long longValue() {
  710.         return (long)value;
  711.     }
  712.  
  713.     /**
  714.      * Returns the value of this {@code Integer} as a
  715.      * {@code float}.
  716.      */
  717.     public float floatValue() {
  718.         return (float)value;
  719.     }
  720.  
  721.     /**
  722.      * Returns the value of this {@code Integer} as a
  723.      * {@code double}.
  724.      */
  725.     public double doubleValue() {
  726.         return (double)value;
  727.     }
  728.  
  729.     /**
  730.      * Returns a {@code String} object representing this
  731.      * {@code Integer}'s value. The value is converted to signed
  732.      * decimal representation and returned as a string, exactly as if
  733.      * the integer value were given as an argument to the {@link
  734.      * java.lang.Integer#toString(int)} method.
  735.      *
  736.      * @return  a string representation of the value of this object in
  737.      *          base&nbsp;10.
  738.      */
  739.     public String toString() {
  740.         return toString(value);
  741.     }
  742.  
  743.     /**
  744.      * Returns a hash code for this {@code Integer}.
  745.      *
  746.      * @return  a hash code value for this object, equal to the
  747.      *          primitive {@code int} value represented by this
  748.      *          {@code Integer} object.
  749.      */
  750.     public int hashCode() {
  751.         return value;
  752.     }
  753.  
  754.     /**
  755.      * Compares this object to the specified object.  The result is
  756.      * {@code true} if and only if the argument is not
  757.      * {@code null} and is an {@code Integer} object that
  758.      * contains the same {@code int} value as this object.
  759.      *
  760.      * @param   obj   the object to compare with.
  761.      * @return  {@code true} if the objects are the same;
  762.      *          {@code false} otherwise.
  763.      */
  764.     public boolean equals(Object obj) {
  765.         if (obj instanceof Integer) {
  766.             return value == ((Integer)obj).intValue();
  767.         }
  768.         return false;
  769.     }
  770.  
  771.     /**
  772.      * Determines the integer value of the system property with the
  773.      * specified name.
  774.      *
  775.      * <p>The first argument is treated as the name of a system property.
  776.      * System properties are accessible through the
  777.      * {@link java.lang.System#getProperty(java.lang.String)} method. The
  778.      * string value of this property is then interpreted as an integer
  779.      * value and an {@code Integer} object representing this value is
  780.      * returned. Details of possible numeric formats can be found with
  781.      * the definition of {@code getProperty}.
  782.      *
  783.      * <p>If there is no property with the specified name, if the specified name
  784.      * is empty or {@code null}, or if the property does not have
  785.      * the correct numeric format, then {@code null} is returned.
  786.      *
  787.      * <p>In other words, this method returns an {@code Integer}
  788.      * object equal to the value of:
  789.      *
  790.      * <blockquote>
  791.      *  {@code getInteger(nm, null)}
  792.      * </blockquote>
  793.      *
  794.      * @param   nm   property name.
  795.      * @return  the {@code Integer} value of the property.
  796.      * @see     java.lang.System#getProperty(java.lang.String)
  797.      * @see     java.lang.System#getProperty(java.lang.String, java.lang.String)
  798.      */
  799.     public static Integer getInteger(String nm) {
  800.         return getInteger(nm, null);
  801.     }
  802.  
  803.     /**
  804.      * Determines the integer value of the system property with the
  805.      * specified name.
  806.      *
  807.      * <p>The first argument is treated as the name of a system property.
  808.      * System properties are accessible through the {@link
  809.      * java.lang.System#getProperty(java.lang.String)} method. The
  810.      * string value of this property is then interpreted as an integer
  811.      * value and an {@code Integer} object representing this value is
  812.      * returned. Details of possible numeric formats can be found with
  813.      * the definition of {@code getProperty}.
  814.      *
  815.      * <p>The second argument is the default value. An {@code Integer} object
  816.      * that represents the value of the second argument is returned if there
  817.      * is no property of the specified name, if the property does not have
  818.      * the correct numeric format, or if the specified name is empty or
  819.      * {@code null}.
  820.      *
  821.      * <p>In other words, this method returns an {@code Integer} object
  822.      * equal to the value of:
  823.      *
  824.      * <blockquote>
  825.      *  {@code getInteger(nm, new Integer(val))}
  826.      * </blockquote>
  827.      *
  828.      * but in practice it may be implemented in a manner such as:
  829.      *
  830.      * <blockquote><pre>
  831.      * Integer result = getInteger(nm, null);
  832.      * return (result == null) ? new Integer(val) : result;
  833.      * </pre></blockquote>
  834.      *
  835.      * to avoid the unnecessary allocation of an {@code Integer}
  836.      * object when the default value is not needed.
  837.      *
  838.      * @param   nm   property name.
  839.      * @param   val   default value.
  840.      * @return  the {@code Integer} value of the property.
  841.      * @see     java.lang.System#getProperty(java.lang.String)
  842.      * @see     java.lang.System#getProperty(java.lang.String, java.lang.String)
  843.      */
  844.     public static Integer getInteger(String nm, int val) {
  845.         Integer result = getInteger(nm, null);
  846.         return (result == null) ? Integer.valueOf(val) : result;
  847.     }
  848.  
  849.     /**
  850.      * Returns the integer value of the system property with the
  851.      * specified name.  The first argument is treated as the name of a
  852.      * system property.  System properties are accessible through the
  853.      * {@link java.lang.System#getProperty(java.lang.String)} method.
  854.      * The string value of this property is then interpreted as an
  855.      * integer value, as per the {@code Integer.decode} method,
  856.      * and an {@code Integer} object representing this value is
  857.      * returned.
  858.      *
  859.      * <ul><li>If the property value begins with the two ASCII characters
  860.      *         {@code 0x} or the ASCII character {@code #}, not
  861.      *      followed by a minus sign, then the rest of it is parsed as a
  862.      *      hexadecimal integer exactly as by the method
  863.      *      {@link #valueOf(java.lang.String, int)} with radix 16.
  864.      * <li>If the property value begins with the ASCII character
  865.      *     {@code 0} followed by another character, it is parsed as an
  866.      *     octal integer exactly as by the method
  867.      *     {@link #valueOf(java.lang.String, int)} with radix 8.
  868.      * <li>Otherwise, the property value is parsed as a decimal integer
  869.      * exactly as by the method {@link #valueOf(java.lang.String, int)}
  870.      * with radix 10.
  871.      * </ul>
  872.      *
  873.      * <p>The second argument is the default value. The default value is
  874.      * returned if there is no property of the specified name, if the
  875.      * property does not have the correct numeric format, or if the
  876.      * specified name is empty or {@code null}.
  877.      *
  878.      * @param   nm   property name.
  879.      * @param   val   default value.
  880.      * @return  the {@code Integer} value of the property.
  881.      * @see     java.lang.System#getProperty(java.lang.String)
  882.      * @see java.lang.System#getProperty(java.lang.String, java.lang.String)
  883.      * @see java.lang.Integer#decode
  884.      */
  885.     public static Integer getInteger(String nm, Integer val) {
  886.         String v = null;
  887.         try {
  888.             v = System.getProperty(nm);
  889.         } catch (IllegalArgumentException e) {
  890.         } catch (NullPointerException e) {
  891.         }
  892.         if (v != null) {
  893.             try {
  894.                 return Integer.decode(v);
  895.             } catch (NumberFormatException e) {
  896.             }
  897.         }
  898.         return val;
  899.     }
  900.  
  901.     /**
  902.      * Decodes a {@code String} into an {@code Integer}.
  903.      * Accepts decimal, hexadecimal, and octal numbers given
  904.      * by the following grammar:
  905.      *
  906.      * <blockquote>
  907.      * <dl>
  908.      * <dt><i>DecodableString:</i>
  909.      * <dd><i>Sign<sub>opt</sub> DecimalNumeral</i>
  910.      * <dd><i>Sign<sub>opt</sub></i> {@code 0x} <i>HexDigits</i>
  911.      * <dd><i>Sign<sub>opt</sub></i> {@code 0X} <i>HexDigits</i>
  912.      * <dd><i>Sign<sub>opt</sub></i> {@code #} <i>HexDigits</i>
  913.      * <dd><i>Sign<sub>opt</sub></i> {@code 0} <i>OctalDigits</i>
  914.      * <p>
  915.      * <dt><i>Sign:</i>
  916.      * <dd>{@code -}
  917.      * <dd>{@code +}
  918.      * </dl>
  919.      * </blockquote>
  920.      *
  921.      * <i>DecimalNumeral</i>, <i>HexDigits</i>, and <i>OctalDigits</i>
  922.      * are as defined in section 3.10.1 of
  923.      * <cite>The Java&trade; Language Specification</cite>,
  924.      * except that underscores are not accepted between digits.
  925.      *
  926.      * <p>The sequence of characters following an optional
  927.      * sign and/or radix specifier ("{@code 0x}", "{@code 0X}",
  928.      * "{@code #}", or leading zero) is parsed as by the {@code
  929.      * Integer.parseInt} method with the indicated radix (10, 16, or
  930.      * 8).  This sequence of characters must represent a positive
  931.      * value or a {@link NumberFormatException} will be thrown.  The
  932.      * result is negated if first character of the specified {@code
  933.      * String} is the minus sign.  No whitespace characters are
  934.      * permitted in the {@code String}.
  935.      *
  936.      * @param     nm the {@code String} to decode.
  937.      * @return    an {@code Integer} object holding the {@code int}
  938.      *             value represented by {@code nm}
  939.      * @exception NumberFormatException  if the {@code String} does not
  940.      *            contain a parsable integer.
  941.      * @see java.lang.Integer#parseInt(java.lang.String, int)
  942.      */
  943.     public static Integer decode(String nm) throws NumberFormatException {
  944.         int radix = 10;
  945.         int index = 0;
  946.         boolean negative = false;
  947.         Integer result;
  948.  
  949.         if (nm.length() == 0)
  950.             throw new NumberFormatException("Zero length string");
  951.         char firstChar = nm.charAt(0);
  952.         // Handle sign, if present
  953.         if (firstChar == '-') {
  954.             negative = true;
  955.             index++;
  956.         } else if (firstChar == '+')
  957.             index++;
  958.  
  959.         // Handle radix specifier, if present
  960.         if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {
  961.             index += 2;
  962.             radix = 16;
  963.         }
  964.         else if (nm.startsWith("#", index)) {
  965.             index ++;
  966.             radix = 16;
  967.         }
  968.         else if (nm.startsWith("0", index) && nm.length() > 1 + index) {
  969.             index ++;
  970.             radix = 8;
  971.         }
  972.  
  973.         if (nm.startsWith("-", index) || nm.startsWith("+", index))
  974.             throw new NumberFormatException("Sign character in wrong position");
  975.  
  976.         try {
  977.             result = Integer.valueOf(nm.substring(index), radix);
  978.             result = negative ? Integer.valueOf(-result.intValue()) : result;
  979.         } catch (NumberFormatException e) {
  980.             // If number is Integer.MIN_VALUE, we'll end up here. The next line
  981.             // handles this case, and causes any genuine format error to be
  982.             // rethrown.
  983.             String constant = negative ? ("-" + nm.substring(index))
  984.                                        : nm.substring(index);
  985.             result = Integer.valueOf(constant, radix);
  986.         }
  987.         return result;
  988.     }
  989.  
  990.     /**
  991.      * Compares two {@code Integer} objects numerically.
  992.      *
  993.      * @param   anotherInteger   the {@code Integer} to be compared.
  994.      * @return  the value {@code 0} if this {@code Integer} is
  995.      *          equal to the argument {@code Integer}; a value less than
  996.      *          {@code 0} if this {@code Integer} is numerically less
  997.      *          than the argument {@code Integer}; and a value greater
  998.      *          than {@code 0} if this {@code Integer} is numerically
  999.      *           greater than the argument {@code Integer} (signed
  1000.      *           comparison).
  1001.      * @since   1.2
  1002.      */
  1003.     public int compareTo(Integer anotherInteger) {
  1004.         return compare(this.value, anotherInteger.value);
  1005.     }
  1006.  
  1007.     /**
  1008.      * Compares two {@code int} values numerically.
  1009.      * The value returned is identical to what would be returned by:
  1010.      * <pre>
  1011.      *    Integer.valueOf(x).compareTo(Integer.valueOf(y))
  1012.      * </pre>
  1013.      *
  1014.      * @param  x the first {@code int} to compare
  1015.      * @param  y the second {@code int} to compare
  1016.      * @return the value {@code 0} if {@code x == y};
  1017.      *         a value less than {@code 0} if {@code x < y}; and
  1018.      *         a value greater than {@code 0} if {@code x > y}
  1019.      * @since 1.7
  1020.      */
  1021.     public static int compare(int x, int y) {
  1022.         return (x < y) ? -1 : ((x == y) ? 0 : 1);
  1023.     }
  1024.  
  1025.  
  1026.     // Bit twiddling
  1027.  
  1028.     /**
  1029.      * The number of bits used to represent an {@code int} value in two's
  1030.      * complement binary form.
  1031.      *
  1032.      * @since 1.5
  1033.      */
  1034.     public static final int SIZE = 32;
  1035.  
  1036.     /**
  1037.      * Returns an {@code int} value with at most a single one-bit, in the
  1038.      * position of the highest-order ("leftmost") one-bit in the specified
  1039.      * {@code int} value.  Returns zero if the specified value has no
  1040.      * one-bits in its two's complement binary representation, that is, if it
  1041.      * is equal to zero.
  1042.      *
  1043.      * @return an {@code int} value with a single one-bit, in the position
  1044.      *     of the highest-order one-bit in the specified value, or zero if
  1045.      *     the specified value is itself equal to zero.
  1046.      * @since 1.5
  1047.      */
  1048.     public static int highestOneBit(int i) {
  1049.         // HD, Figure 3-1
  1050.         i |= (i >>  1);
  1051.         i |= (i >>  2);
  1052.         i |= (i >>  4);
  1053.         i |= (i >>  8);
  1054.         i |= (i >> 16);
  1055.         return i - (i >>> 1);
  1056.     }
  1057.  
  1058.     /**
  1059.      * Returns an {@code int} value with at most a single one-bit, in the
  1060.      * position of the lowest-order ("rightmost") one-bit in the specified
  1061.      * {@code int} value.  Returns zero if the specified value has no
  1062.      * one-bits in its two's complement binary representation, that is, if it
  1063.      * is equal to zero.
  1064.      *
  1065.      * @return an {@code int} value with a single one-bit, in the position
  1066.      *     of the lowest-order one-bit in the specified value, or zero if
  1067.      *     the specified value is itself equal to zero.
  1068.      * @since 1.5
  1069.      */
  1070.     public static int lowestOneBit(int i) {
  1071.         // HD, Section 2-1
  1072.         return i & -i;
  1073.     }
  1074.  
  1075.     /**
  1076.      * Returns the number of zero bits preceding the highest-order
  1077.      * ("leftmost") one-bit in the two's complement binary representation
  1078.      * of the specified {@code int} value.  Returns 32 if the
  1079.      * specified value has no one-bits in its two's complement representation,
  1080.      * in other words if it is equal to zero.
  1081.      *
  1082.      * <p>Note that this method is closely related to the logarithm base 2.
  1083.      * For all positive {@code int} values x:
  1084.      * <ul>
  1085.      * <li>floor(log<sub>2</sub>(x)) = {@code 31 - numberOfLeadingZeros(x)}
  1086.      * <li>ceil(log<sub>2</sub>(x)) = {@code 32 - numberOfLeadingZeros(x - 1)}
  1087.      * </ul>
  1088.      *
  1089.      * @return the number of zero bits preceding the highest-order
  1090.      *     ("leftmost") one-bit in the two's complement binary representation
  1091.      *     of the specified {@code int} value, or 32 if the value
  1092.      *     is equal to zero.
  1093.      * @since 1.5
  1094.      */
  1095.     public static int numberOfLeadingZeros(int i) {
  1096.         // HD, Figure 5-6
  1097.         if (i == 0)
  1098.             return 32;
  1099.         int n = 1;
  1100.         if (i >>> 16 == 0) { n += 16; i <<= 16; }
  1101.         if (i >>> 24 == 0) { n +=  8; i <<=  8; }
  1102.         if (i >>> 28 == 0) { n +=  4; i <<=  4; }
  1103.         if (i >>> 30 == 0) { n +=  2; i <<=  2; }
  1104.         n -= i >>> 31;
  1105.         return n;
  1106.     }
  1107.  
  1108.     /**
  1109.      * Returns the number of zero bits following the lowest-order ("rightmost")
  1110.      * one-bit in the two's complement binary representation of the specified
  1111.      * {@code int} value.  Returns 32 if the specified value has no
  1112.      * one-bits in its two's complement representation, in other words if it is
  1113.      * equal to zero.
  1114.      *
  1115.      * @return the number of zero bits following the lowest-order ("rightmost")
  1116.      *     one-bit in the two's complement binary representation of the
  1117.      *     specified {@code int} value, or 32 if the value is equal
  1118.      *     to zero.
  1119.      * @since 1.5
  1120.      */
  1121.     public static int numberOfTrailingZeros(int i) {
  1122.         // HD, Figure 5-14
  1123.         int y;
  1124.         if (i == 0) return 32;
  1125.         int n = 31;
  1126.         y = i <<16; if (y != 0) { n = n -16; i = y; }
  1127.         y = i << 8; if (y != 0) { n = n - 8; i = y; }
  1128.         y = i << 4; if (y != 0) { n = n - 4; i = y; }
  1129.         y = i << 2; if (y != 0) { n = n - 2; i = y; }
  1130.         return n - ((i << 1) >>> 31);
  1131.     }
  1132.  
  1133.     /**
  1134.      * Returns the number of one-bits in the two's complement binary
  1135.      * representation of the specified {@code int} value.  This function is
  1136.      * sometimes referred to as the <i>population count</i>.
  1137.      *
  1138.      * @return the number of one-bits in the two's complement binary
  1139.      *     representation of the specified {@code int} value.
  1140.      * @since 1.5
  1141.      */
  1142.     public static int bitCount(int i) {
  1143.         // HD, Figure 5-2
  1144.         i = i - ((i >>> 1) & 0x55555555);
  1145.         i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
  1146.         i = (i + (i >>> 4)) & 0x0f0f0f0f;
  1147.         i = i + (i >>> 8);
  1148.         i = i + (i >>> 16);
  1149.         return i & 0x3f;
  1150.     }
  1151.  
  1152.     /**
  1153.      * Returns the value obtained by rotating the two's complement binary
  1154.      * representation of the specified {@code int} value left by the
  1155.      * specified number of bits.  (Bits shifted out of the left hand, or
  1156.      * high-order, side reenter on the right, or low-order.)
  1157.      *
  1158.      * <p>Note that left rotation with a negative distance is equivalent to
  1159.      * right rotation: {@code rotateLeft(val, -distance) == rotateRight(val,
  1160.      * distance)}.  Note also that rotation by any multiple of 32 is a
  1161.      * no-op, so all but the last five bits of the rotation distance can be
  1162.      * ignored, even if the distance is negative: {@code rotateLeft(val,
  1163.      * distance) == rotateLeft(val, distance & 0x1F)}.
  1164.      *
  1165.      * @return the value obtained by rotating the two's complement binary
  1166.      *     representation of the specified {@code int} value left by the
  1167.      *     specified number of bits.
  1168.      * @since 1.5
  1169.      */
  1170.     public static int rotateLeft(int i, int distance) {
  1171.         return (i << distance) | (i >>> -distance);
  1172.     }
  1173.  
  1174.     /**
  1175.      * Returns the value obtained by rotating the two's complement binary
  1176.      * representation of the specified {@code int} value right by the
  1177.      * specified number of bits.  (Bits shifted out of the right hand, or
  1178.      * low-order, side reenter on the left, or high-order.)
  1179.      *
  1180.      * <p>Note that right rotation with a negative distance is equivalent to
  1181.      * left rotation: {@code rotateRight(val, -distance) == rotateLeft(val,
  1182.      * distance)}.  Note also that rotation by any multiple of 32 is a
  1183.      * no-op, so all but the last five bits of the rotation distance can be
  1184.      * ignored, even if the distance is negative: {@code rotateRight(val,
  1185.      * distance) == rotateRight(val, distance & 0x1F)}.
  1186.      *
  1187.      * @return the value obtained by rotating the two's complement binary
  1188.      *     representation of the specified {@code int} value right by the
  1189.      *     specified number of bits.
  1190.      * @since 1.5
  1191.      */
  1192.     public static int rotateRight(int i, int distance) {
  1193.         return (i >>> distance) | (i << -distance);
  1194.     }
  1195.  
  1196.     /**
  1197.      * Returns the value obtained by reversing the order of the bits in the
  1198.      * two's complement binary representation of the specified {@code int}
  1199.      * value.
  1200.      *
  1201.      * @return the value obtained by reversing order of the bits in the
  1202.      *     specified {@code int} value.
  1203.      * @since 1.5
  1204.      */
  1205.     public static int reverse(int i) {
  1206.         // HD, Figure 7-1
  1207.         i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;
  1208.         i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333;
  1209.         i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f;
  1210.         i = (i << 24) | ((i & 0xff00) << 8) |
  1211.             ((i >>> 8) & 0xff00) | (i >>> 24);
  1212.         return i;
  1213.     }
  1214.  
  1215.     /**
  1216.      * Returns the signum function of the specified {@code int} value.  (The
  1217.      * return value is -1 if the specified value is negative; 0 if the
  1218.      * specified value is zero; and 1 if the specified value is positive.)
  1219.      *
  1220.      * @return the signum function of the specified {@code int} value.
  1221.      * @since 1.5
  1222.      */
  1223.     public static int signum(int i) {
  1224.         // HD, Section 2-7
  1225.         return (i >> 31) | (-i >>> 31);
  1226.     }
  1227.  
  1228.     /**
  1229.      * Returns the value obtained by reversing the order of the bytes in the
  1230.      * two's complement representation of the specified {@code int} value.
  1231.      *
  1232.      * @return the value obtained by reversing the bytes in the specified
  1233.      *     {@code int} value.
  1234.      * @since 1.5
  1235.      */
  1236.     public static int reverseBytes(int i) {
  1237.         return ((i >>> 24)           ) |
  1238.                ((i >>   8) &   0xFF00) |
  1239.                ((i <<   8) & 0xFF0000) |
  1240.                ((i << 24));
  1241.     }
  1242.  
  1243.     /** use serialVersionUID from JDK 1.0.2 for interoperability */
  1244.     private static final long serialVersionUID = 1360826667806852920L;
  1245. }
  1246.