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

#ifndef __java_util_UUID__
#define __java_util_UUID__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>


class java::util::UUID : public ::java::lang::Object
{

public:
  UUID(jlong, jlong);
  jint clockSequence();
  jint UUID$compareTo(::java::util::UUID *);
  jboolean equals(::java::lang::Object *);
  static ::java::util::UUID * fromString(::java::lang::String *);
  ::java::lang::String * toString();
  jlong getLeastSignificantBits();
  jlong getMostSignificantBits();
  jint hashCode();
  static ::java::util::UUID * nameUUIDFromBytes(JArray< jbyte > *);
  jlong node();
  jlong timestamp();
  static ::java::util::UUID * randomUUID();
private:
  ::java::lang::String * padHex(jlong, jint);
public:
  jint variant();
  jint version();
  jint compareTo(::java::lang::Object *);
private:
  static const jlong serialVersionUID = -4856846361193249489LL;
  jlong __attribute__((aligned(__alignof__( ::java::lang::Object)))) mostSigBits;
  jlong leastSigBits;
  static ::java::util::Random * r;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_UUID__
