
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_lang_Float__
#define __java_lang_Float__

#pragma interface

#include <java/lang/Number.h>

class java::lang::Float : public ::java::lang::Number
{

public:
  Float(jfloat);
  Float(jdouble);
  Float(::java::lang::String *);
  static ::java::lang::String * toString(jfloat);
  static ::java::lang::String * toHexString(jfloat);
  static ::java::lang::Float * valueOf(::java::lang::String *);
  static ::java::lang::Float * valueOf(jfloat);
  static jfloat parseFloat(::java::lang::String *);
  static jboolean isNaN(jfloat);
  static jboolean isInfinite(jfloat);
  jboolean isNaN();
  jboolean isInfinite();
  ::java::lang::String * toString();
  jbyte byteValue();
  jshort shortValue();
  jint intValue();
  jlong longValue();
  jfloat floatValue();
  jdouble doubleValue();
  jint hashCode();
  jboolean equals(::java::lang::Object *);
  static jint floatToIntBits(jfloat);
  static jint floatToRawIntBits(jfloat);
  static jfloat intBitsToFloat(jint);
  jint Float$compareTo(::java::lang::Float *);
  static jint compare(jfloat, jfloat);
  jint compareTo(::java::lang::Object *);
private:
  static const jlong serialVersionUID = -2671257302660747028LL;
public:
  static jfloat MAX_VALUE;
  static jfloat MIN_VALUE;
  static jfloat NEGATIVE_INFINITY;
  static jfloat POSITIVE_INFINITY;
  static jfloat NaN;
  static ::java::lang::Class * TYPE;
  static const jint SIZE = 32;
private:
  static ::java::lang::Float * ZERO;
  static ::java::lang::Float * ONE;
  jfloat __attribute__((aligned(__alignof__( ::java::lang::Number)))) value;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_Float__
