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

#ifndef __java_util_AbstractList__
#define __java_util_AbstractList__

#pragma interface

#include <java/util/AbstractCollection.h>

class java::util::AbstractList : public ::java::util::AbstractCollection
{

public: // actually protected
  AbstractList();
public:
  virtual ::java::lang::Object * get(jint) = 0;
  virtual void add(jint, ::java::lang::Object *);
  virtual jboolean add(::java::lang::Object *);
  virtual jboolean addAll(jint, ::java::util::Collection *);
  virtual void clear();
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual jint indexOf(::java::lang::Object *);
  virtual ::java::util::Iterator * iterator();
  virtual jint lastIndexOf(::java::lang::Object *);
  virtual ::java::util::ListIterator * listIterator();
  virtual ::java::util::ListIterator * listIterator(jint);
  virtual ::java::lang::Object * remove(jint);
public: // actually protected
  virtual void removeRange(jint, jint);
public:
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual ::java::util::List * subList(jint, jint);
public: // actually protected
  jint __attribute__((aligned(__alignof__( ::java::util::AbstractCollection)))) modCount;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_AbstractList__
