⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 choiceformat.java

📁 this gcc-g++-3.3.1.tar.gz is a source file of gcc, you can learn more about gcc through this codes f
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   *   * @return The <code>StringBuffer</code> with the format string appended.   */  public StringBuffer format (double num, StringBuffer appendBuf,			      FieldPosition pos)  {    if (choiceLimits.length == 0)      return appendBuf;    int index = 0;    if (! Double.isNaN(num) && num >= choiceLimits[0])      {	for (; index < choiceLimits.length - 1; ++index)	  {	    if (choiceLimits[index] <= num && num < choiceLimits[index + 1])	      break;	  }      }    return appendBuf.append(choiceFormats[index]);  }  /**   * This method returns the list of format strings in use.   *   * @return The list of format objects.   */  public Object[] getFormats ()  {    return (Object[]) choiceFormats.clone();  }  /**   * This method returns the list of range terminators in use.   *   * @return The list of range terminators.   */  public double[] getLimits ()  {    return (double[]) choiceLimits.clone();  }  /**   * This method returns a hash value for this object   *    * @return A hash value for this object.   */  public int hashCode ()  {    int hash = 0;    for (int i = 0; i < choiceLimits.length; ++i)      {	long v = Double.doubleToLongBits(choiceLimits[i]);	hash ^= (v ^ (v >>> 32));	hash ^= choiceFormats[i].hashCode();      }    return hash;  }  /**   * This method returns the lowest possible double greater than the    * specified double.  If the specified double value is equal to   * <code>Double.NaN</code> then that is the value returned.   *   * @param d The specified double   *   * @return The lowest double value greater than the specified double.   */  public static final double nextDouble (double d)  {    return nextDouble (d, true);  }  /**   * This method returns a double that is either the next highest double   * or next lowest double compared to the specified double depending on the   * value of the passed boolean parameter.  If the boolean parameter is   * <code>true</code>, then the lowest possible double greater than the    * specified double will be returned.  Otherwise the highest possible   * double less than the specified double will be returned.   *   * @param d The specified double   * @param positive <code>true</code> to return the next highest   *                 double, <code>false</code> otherwise.    *   * @return The next highest or lowest double value.   */  public static double nextDouble (double d, boolean next)  {    if (Double.isInfinite(d) || Double.isNaN(d))      return d;    long bits = Double.doubleToLongBits(d);    long mantMask = (1L << mantissaBits) - 1;    long mantissa = bits & mantMask;    long expMask = (1L << exponentBits) - 1;    long exponent = (bits >>> mantissaBits) & expMask;    if (next ^ (bits < 0)) // Increment magnitude      {	if (mantissa == (1L << mantissaBits) - 1)	  {	    mantissa = 0L;	    exponent++;	     	    // Check for absolute overflow.	    if (exponent >= (1L << mantissaBits))	      return (bits > 0) ? Double.POSITIVE_INFINITY 		: Double.NEGATIVE_INFINITY;		      	  }	else	  mantissa++;      }    else // Decrement magnitude      {	if (exponent == 0L && mantissa == 0L)	  {	    // The only case where there is a change of sign	    return next ? Double.MIN_VALUE : -Double.MIN_VALUE;	  }	else	  {	    if (mantissa == 0L)	      {		mantissa = (1L << mantissaBits) - 1;		exponent--;	      }	    else	      mantissa--;	  }      }    long result = bits < 0 ? 1 : 0;    result = (result << exponentBits) | exponent;    result = (result << mantissaBits) | mantissa;    return Double.longBitsToDouble(result);  }  /**   * I'm not sure what this method is really supposed to do, as it is   * not documented.   */  public Number parse (String sourceStr, ParsePosition pos)  {    int index = pos.getIndex();    for (int i = 0; i < choiceLimits.length; ++i)      {	if (sourceStr.startsWith(choiceFormats[i], index))	  {	    pos.setIndex(index + choiceFormats[i].length());	    return new Double (choiceLimits[i]);	  }      }    pos.setErrorIndex(index);    return new Double (Double.NaN);  }  /**   * This method returns the highest possible double less than the    * specified double.  If the specified double value is equal to   * <code>Double.NaN</code> then that is the value returned.   *   * @param d The specified double   *   * @return The highest double value less than the specified double.   */  public static final double previousDouble (double d)  {    return nextDouble (d, false);  }  /**   * This method sets new range terminators and format strings for this   * object.   *   * @param choiceLimits The new range terminators   * @param choiceFormats The new choice formats   */  public void setChoices (double[] choiceLimits, String[] choiceFormats)  {    if (choiceLimits == null || choiceFormats == null)      throw new NullPointerException ();    if (choiceLimits.length != choiceFormats.length)      throw new IllegalArgumentException ();    this.choiceFormats = (String[]) choiceFormats.clone();    this.choiceLimits = (double[]) choiceLimits.clone();  }  private final void quoteString (StringBuffer dest, String text)  {    int max = text.length();    for (int i = 0; i < max; ++i)      {	char c = text.charAt(i);	if (c == '\'')	  {	    dest.append(c);	    dest.append(c);	  }	else if (c == '#' || c == '|' || c == '\u2064' || c == '<')	  {	    dest.append('\'');	    dest.append(c);	    dest.append('\'');	  }	else	  dest.append(c);      }  }  /**   * This method returns the range terminator list and format string list   * as a <code>String</code> suitable for using with the    * <code>applyPattern</code> method.   *   * @return A pattern string for this object   */  public String toPattern ()  {    StringBuffer result = new StringBuffer ();    for (int i = 0; i < choiceLimits.length; ++i)      {	result.append(choiceLimits[i]);	result.append('#');	quoteString (result, choiceFormats[i]);      }    return result.toString();  }  /**   * This is the list of format strings.  Note that this variable is   * specified by the serialization spec of this class.   */  private String[] choiceFormats;  /**   * This is the list of range terminator values.  Note that this variable is   * specified by the serialization spec of this class.   */  private double[] choiceLimits;  // Number of mantissa bits in double.  private static final int mantissaBits = 52;  // Number of exponent bits in a double.  private static final int exponentBits = 11;  private static final long serialVersionUID = 1795184449645032964L;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -