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

#ifndef __java_util_AbstractList$SubList__
#define __java_util_AbstractList$SubList__

#pragma interface

#include <java/util/AbstractList.h>

class java::util::AbstractList$SubList : public ::java::util::AbstractList
{

public: // actually package-private
  AbstractList$SubList(::java::util::AbstractList *, jint, jint);
  virtual void checkMod();
private:
  void checkBoundsInclusive(jint);
  void checkBoundsExclusive(jint);
public:
  virtual jint size();
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * get(jint);
  virtual void add(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * remove(jint);
public: // actually protected
  virtual void removeRange(jint, jint);
public:
  virtual jboolean addAll(jint, ::java::util::Collection *);
  virtual jboolean addAll(::java::util::Collection *);
  virtual ::java::util::Iterator * iterator();
  virtual ::java::util::ListIterator * listIterator(jint);
public: // actually package-private
  ::java::util::AbstractList * __attribute__((aligned(__alignof__( ::java::util::AbstractList)))) backingList;
  jint offset;
  jint size__;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_AbstractList$SubList__
