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

#ifndef __java_util_concurrent_CopyOnWriteArrayList$SubList__
#define __java_util_concurrent_CopyOnWriteArrayList$SubList__

#pragma interface

#include <java/util/AbstractList.h>
#include <gcj/array.h>


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

public: // actually package-private
  CopyOnWriteArrayList$SubList(::java::util::concurrent::CopyOnWriteArrayList *, jint, jint);
  virtual void checkMod();
private:
  void checkBoundsInclusive(jint);
  void checkBoundsExclusive(jint);
public:
  virtual jint size();
  virtual void clear();
  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);
  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::concurrent::CopyOnWriteArrayList * __attribute__((aligned(__alignof__( ::java::util::AbstractList)))) backingList;
  jint offset;
  jint size__;
  JArray< ::java::lang::Object * > * data;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_CopyOnWriteArrayList$SubList__
