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

#ifndef __java_util_Arrays__
#define __java_util_Arrays__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
          class CPStringBuilder;
      }
    }
  }
}

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

  Arrays();
public:
  static jint binarySearch(JArray< jbyte > *, jbyte);
  static jint binarySearch(JArray< jbyte > *, jint, jint, jbyte);
  static jint binarySearch(JArray< jchar > *, jchar);
  static jint binarySearch(JArray< jchar > *, jint, jint, jchar);
  static jint binarySearch(JArray< jshort > *, jshort);
  static jint binarySearch(JArray< jshort > *, jint, jint, jshort);
  static jint binarySearch(JArray< jint > *, jint);
  static jint binarySearch(JArray< jint > *, jint, jint, jint);
  static jint binarySearch(JArray< jlong > *, jlong);
  static jint binarySearch(JArray< jlong > *, jint, jint, jlong);
  static jint binarySearch(JArray< jfloat > *, jfloat);
  static jint binarySearch(JArray< jfloat > *, jint, jint, jfloat);
  static jint binarySearch(JArray< jdouble > *, jdouble);
  static jint binarySearch(JArray< jdouble > *, jint, jint, jdouble);
  static jint binarySearch(JArray< ::java::lang::Object * > *, ::java::lang::Object *);
  static jint binarySearch(JArray< ::java::lang::Object * > *, jint, jint, ::java::lang::Object *);
  static jint binarySearch(JArray< ::java::lang::Object * > *, ::java::lang::Object *, ::java::util::Comparator *);
  static jint binarySearch(JArray< ::java::lang::Object * > *, jint, jint, ::java::lang::Object *, ::java::util::Comparator *);
  static jboolean equals(JArray< jboolean > *, JArray< jboolean > *);
  static jboolean equals(JArray< jbyte > *, JArray< jbyte > *);
  static jboolean equals(JArray< jchar > *, JArray< jchar > *);
  static jboolean equals(JArray< jshort > *, JArray< jshort > *);
  static jboolean equals(JArray< jint > *, JArray< jint > *);
  static jboolean equals(JArray< jlong > *, JArray< jlong > *);
  static jboolean equals(JArray< jfloat > *, JArray< jfloat > *);
  static jboolean equals(JArray< jdouble > *, JArray< jdouble > *);
  static jboolean equals(JArray< ::java::lang::Object * > *, JArray< ::java::lang::Object * > *);
  static void fill(JArray< jboolean > *, jboolean);
  static void fill(JArray< jboolean > *, jint, jint, jboolean);
  static void fill(JArray< jbyte > *, jbyte);
  static void fill(JArray< jbyte > *, jint, jint, jbyte);
  static void fill(JArray< jchar > *, jchar);
  static void fill(JArray< jchar > *, jint, jint, jchar);
  static void fill(JArray< jshort > *, jshort);
  static void fill(JArray< jshort > *, jint, jint, jshort);
  static void fill(JArray< jint > *, jint);
  static void fill(JArray< jint > *, jint, jint, jint);
  static void fill(JArray< jlong > *, jlong);
  static void fill(JArray< jlong > *, jint, jint, jlong);
  static void fill(JArray< jfloat > *, jfloat);
  static void fill(JArray< jfloat > *, jint, jint, jfloat);
  static void fill(JArray< jdouble > *, jdouble);
  static void fill(JArray< jdouble > *, jint, jint, jdouble);
  static void fill(JArray< ::java::lang::Object * > *, ::java::lang::Object *);
  static void fill(JArray< ::java::lang::Object * > *, jint, jint, ::java::lang::Object *);
  static void sort(JArray< jbyte > *);
  static void sort(JArray< jbyte > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jbyte > *);
  static void swap(jint, jint, JArray< jbyte > *);
  static void vecswap(jint, jint, jint, JArray< jbyte > *);
  static void qsort(JArray< jbyte > *, jint, jint);
public:
  static void sort(JArray< jchar > *);
  static void sort(JArray< jchar > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jchar > *);
  static void swap(jint, jint, JArray< jchar > *);
  static void vecswap(jint, jint, jint, JArray< jchar > *);
  static void qsort(JArray< jchar > *, jint, jint);
public:
  static void sort(JArray< jshort > *);
  static void sort(JArray< jshort > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jshort > *);
  static void swap(jint, jint, JArray< jshort > *);
  static void vecswap(jint, jint, jint, JArray< jshort > *);
  static void qsort(JArray< jshort > *, jint, jint);
public:
  static void sort(JArray< jint > *);
  static void sort(JArray< jint > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jint > *);
  static void swap(jint, jint, JArray< jint > *);
  static void vecswap(jint, jint, jint, JArray< jint > *);
  static jint compare(jint, jint);
  static void qsort(JArray< jint > *, jint, jint);
public:
  static void sort(JArray< jlong > *);
  static void sort(JArray< jlong > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jlong > *);
  static void swap(jint, jint, JArray< jlong > *);
  static void vecswap(jint, jint, jint, JArray< jlong > *);
  static jint compare(jlong, jlong);
  static void qsort(JArray< jlong > *, jint, jint);
public:
  static void sort(JArray< jfloat > *);
  static void sort(JArray< jfloat > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jfloat > *);
  static void swap(jint, jint, JArray< jfloat > *);
  static void vecswap(jint, jint, jint, JArray< jfloat > *);
  static void qsort(JArray< jfloat > *, jint, jint);
public:
  static void sort(JArray< jdouble > *);
  static void sort(JArray< jdouble > *, jint, jint);
private:
  static jint med3(jint, jint, jint, JArray< jdouble > *);
  static void swap(jint, jint, JArray< jdouble > *);
  static void vecswap(jint, jint, jint, JArray< jdouble > *);
  static void qsort(JArray< jdouble > *, jint, jint);
public:
  static void sort(JArray< ::java::lang::Object * > *);
  static void sort(JArray< ::java::lang::Object * > *, ::java::util::Comparator *);
  static void sort(JArray< ::java::lang::Object * > *, jint, jint);
  static void sort(JArray< ::java::lang::Object * > *, jint, jint, ::java::util::Comparator *);
  static ::java::util::List * asList(JArray< ::java::lang::Object * > *);
  static jint hashCode(JArray< jlong > *);
  static jint hashCode(JArray< jint > *);
  static jint hashCode(JArray< jshort > *);
  static jint hashCode(JArray< jchar > *);
  static jint hashCode(JArray< jbyte > *);
  static jint hashCode(JArray< jboolean > *);
  static jint hashCode(JArray< jfloat > *);
  static jint hashCode(JArray< jdouble > *);
  static jint hashCode(JArray< ::java::lang::Object * > *);
  static jint deepHashCode(JArray< ::java::lang::Object * > *);
  static jboolean deepEquals(JArray< ::java::lang::Object * > *, JArray< ::java::lang::Object * > *);
  static ::java::lang::String * toString(JArray< jboolean > *);
  static ::java::lang::String * toString(JArray< jbyte > *);
  static ::java::lang::String * toString(JArray< jchar > *);
  static ::java::lang::String * toString(JArray< jshort > *);
  static ::java::lang::String * toString(JArray< jint > *);
  static ::java::lang::String * toString(JArray< jlong > *);
  static ::java::lang::String * toString(JArray< jfloat > *);
  static ::java::lang::String * toString(JArray< jdouble > *);
  static ::java::lang::String * toString(JArray< ::java::lang::Object * > *);
private:
  static void deepToString(JArray< ::java::lang::Object * > *, ::gnu::java::lang::CPStringBuilder *, ::java::util::HashSet *);
public:
  static ::java::lang::String * deepToString(JArray< ::java::lang::Object * > *);
  static JArray< jboolean > * copyOf(JArray< jboolean > *, jint);
  static JArray< jboolean > * copyOfRange(JArray< jboolean > *, jint, jint);
  static JArray< jbyte > * copyOf(JArray< jbyte > *, jint);
  static JArray< jbyte > * copyOfRange(JArray< jbyte > *, jint, jint);
  static JArray< jchar > * copyOf(JArray< jchar > *, jint);
  static JArray< jchar > * copyOfRange(JArray< jchar > *, jint, jint);
  static JArray< jdouble > * copyOf(JArray< jdouble > *, jint);
  static JArray< jdouble > * copyOfRange(JArray< jdouble > *, jint, jint);
  static JArray< jfloat > * copyOf(JArray< jfloat > *, jint);
  static JArray< jfloat > * copyOfRange(JArray< jfloat > *, jint, jint);
  static JArray< jint > * copyOf(JArray< jint > *, jint);
  static JArray< jint > * copyOfRange(JArray< jint > *, jint, jint);
  static JArray< jlong > * copyOf(JArray< jlong > *, jint);
  static JArray< jlong > * copyOfRange(JArray< jlong > *, jint, jint);
  static JArray< jshort > * copyOf(JArray< jshort > *, jint);
  static JArray< jshort > * copyOfRange(JArray< jshort > *, jint, jint);
  static JArray< ::java::lang::Object * > * copyOf(JArray< ::java::lang::Object * > *, jint);
  static JArray< ::java::lang::Object * > * copyOfRange(JArray< ::java::lang::Object * > *, jint, jint);
  static JArray< ::java::lang::Object * > * copyOf(JArray< ::java::lang::Object * > *, jint, ::java::lang::Class *);
  static JArray< ::java::lang::Object * > * copyOfRange(JArray< ::java::lang::Object * > *, jint, jint, ::java::lang::Class *);
  static ::java::lang::Class class$;
};

#endif // __java_util_Arrays__
