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

#ifndef __java_util_List__
#define __java_util_List__

#pragma interface

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


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

public:
  virtual void add(jint, ::java::lang::Object *) = 0;
  virtual jboolean add(::java::lang::Object *) = 0;
  virtual jboolean addAll(jint, ::java::util::Collection *) = 0;
  virtual jboolean addAll(::java::util::Collection *) = 0;
  virtual void clear() = 0;
  virtual jboolean contains(::java::lang::Object *) = 0;
  virtual jboolean containsAll(::java::util::Collection *) = 0;
  virtual jboolean equals(::java::lang::Object *) = 0;
  virtual ::java::lang::Object * get(jint) = 0;
  virtual jint hashCode() = 0;
  virtual jint indexOf(::java::lang::Object *) = 0;
  virtual jboolean isEmpty() = 0;
  virtual ::java::util::Iterator * iterator() = 0;
  virtual jint lastIndexOf(::java::lang::Object *) = 0;
  virtual ::java::util::ListIterator * listIterator() = 0;
  virtual ::java::util::ListIterator * listIterator(jint) = 0;
  virtual ::java::lang::Object * remove(jint) = 0;
  virtual jboolean remove(::java::lang::Object *) = 0;
  virtual jboolean removeAll(::java::util::Collection *) = 0;
  virtual jboolean retainAll(::java::util::Collection *) = 0;
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *) = 0;
  virtual jint size() = 0;
  virtual ::java::util::List * subList(jint, jint) = 0;
  virtual JArray< ::java::lang::Object * > * toArray() = 0;
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *) = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_util_List__
