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

#ifndef __java_text_CollationKey__
#define __java_text_CollationKey__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace text
    {
        class CollationKey;
        class Collator;
    }
  }
}

class java::text::CollationKey : public ::java::lang::Object
{

public: // actually package-private
  CollationKey(::java::text::Collator *, ::java::lang::String *, JArray< jbyte > *);
public:
  virtual jint CollationKey$compareTo(::java::text::CollationKey *);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * getSourceString();
  virtual jint hashCode();
  virtual JArray< jbyte > * toByteArray();
  virtual jint compareTo(::java::lang::Object *);
private:
  ::java::text::Collator * __attribute__((aligned(__alignof__( ::java::lang::Object)))) collator;
  ::java::lang::String * originalText;
  JArray< jbyte > * key;
public:
  static ::java::lang::Class class$;
};

#endif // __java_text_CollationKey__
