/* Copyright (C) 1998, 1999  Cygnus Solutions

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

package java.lang;

/**
 * @author Per Bothner <bothner@cygnus.com>
 * @date April 17, 1998.  
 */
/* Written using "Java Class Libraries", 2nd edition, plus online
 * API docs for JDK 1.2 beta from http://www.javasoft.com.
 * Status:  Believed complete and correct.
 *	    Includes JDK 1.2 methods.
 */

public final class Short extends Number implements Comparable
{
  short value;

  public final static short MIN_VALUE = -32768;
  public final static short MAX_VALUE = 32767;

  // This initialization is seemingly circular, but it is accepted
  // by javac, and is handled specially by gcc.
  public static final Class TYPE = short.class;

  public Short(short value)
  {
    this.value = value;
  }

  public Short(String str) 
    throws NumberFormatException
  {
    this.value = parseShort(str, 10);
  }

  public byte byteValue()
  {
    return (byte) value;
  }

  public short shortValue()
  {
    return value;
  }

  public int intValue()
  {
    return value;
  }

  public long longValue ()
  {
    return value;
  }

  public float floatValue ()
  {
    return (float) value;
  }

  public double doubleValue ()
  {
    return (double) value;
  }

  public static Short decode(String str)
    throws NumberFormatException
  {
    int i = (Integer.decode(str)).intValue();
    if (i < MIN_VALUE || i > MAX_VALUE)
      throw new NumberFormatException();
    return new Short((short) i);
  }

  public static short parseShort(String str, int radix)
    throws NumberFormatException
  {
    int i = Integer.parseInt(str, radix);
    if (i < MIN_VALUE || i > MAX_VALUE)
      throw new NumberFormatException();
    return (short) i;
  }

  public static short parseShort(String str)
    throws NumberFormatException
  {
    return parseShort(str, 10);
  }

  public static Short valueOf(String str, int radix)
    throws NumberFormatException
  {
    return new Short(parseShort(str, radix));
  }

  public static Short valueOf(String str)
    throws NumberFormatException
  {
    return valueOf(str, 10);
  }

  // Added in JDK 1.2
  public int compareTo(Short anotherShort)
  {
    return this.value - anotherShort.value;
  }

  // Added in JDK 1.2
  public int compareTo(Object o) throws ClassCastException
  {
    if (o instanceof Short)
      return this.value - ((Short) o).value;
    else
      throw new ClassCastException();
  }

  public boolean equals(Object obj)
  {
    return (obj != null && (obj instanceof Short)
	    && ((Short) obj).value == value);
  }

  // Verified that hashCode is returns plain value (see Short_1 test).
  public int hashCode()
  {
    return value;
  }

  public String toString()
  {
    return Integer.toString((int) value);
  }

  public static String toString(short value)
  {
    return Integer.toString((int) value);
  }
}
