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

#ifndef __java_util_LinkedList__
#define __java_util_LinkedList__

#pragma interface

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


class java::util::LinkedList : public ::java::util::AbstractSequentialList
{

public: // actually package-private
  virtual ::java::util::LinkedList$Entry * getEntry(jint);
  virtual void removeEntry(::java::util::LinkedList$Entry *);
private:
  void checkBoundsInclusive(jint);
  void checkBoundsExclusive(jint);
public:
  LinkedList();
  LinkedList(::java::util::Collection *);
  virtual ::java::lang::Object * getFirst();
  virtual ::java::lang::Object * getLast();
  virtual ::java::lang::Object * removeFirst();
  virtual ::java::lang::Object * removeLast();
  virtual void addFirst(::java::lang::Object *);
  virtual void addLast(::java::lang::Object *);
private:
  void addLastEntry(::java::util::LinkedList$Entry *);
public:
  virtual jboolean contains(::java::lang::Object *);
  virtual jint size();
  virtual jboolean add(::java::lang::Object *);
  virtual jboolean remove(::java::lang::Object *);
  virtual jboolean addAll(::java::util::Collection *);
  virtual jboolean addAll(jint, ::java::util::Collection *);
  virtual void clear();
  virtual ::java::lang::Object * get(jint);
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual void add(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * remove(jint);
  virtual jint indexOf(::java::lang::Object *);
  virtual jint lastIndexOf(::java::lang::Object *);
  virtual ::java::util::ListIterator * listIterator(jint);
  virtual ::java::lang::Object * clone();
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  virtual jboolean offer(::java::lang::Object *);
  virtual ::java::lang::Object * element();
  virtual ::java::lang::Object * peek();
  virtual ::java::lang::Object * poll();
  virtual ::java::lang::Object * remove();
private:
  void writeObject(::java::io::ObjectOutputStream *);
  void readObject(::java::io::ObjectInputStream *);
public:
  virtual ::java::util::Iterator * descendingIterator();
  virtual jboolean offerFirst(::java::lang::Object *);
  virtual jboolean offerLast(::java::lang::Object *);
  virtual ::java::lang::Object * peekFirst();
  virtual ::java::lang::Object * peekLast();
  virtual ::java::lang::Object * pollFirst();
  virtual ::java::lang::Object * pollLast();
  virtual ::java::lang::Object * pop();
  virtual void push(::java::lang::Object *);
  virtual jboolean removeFirstOccurrence(::java::lang::Object *);
  virtual jboolean removeLastOccurrence(::java::lang::Object *);
private:
  static const jlong serialVersionUID = 876323262645176354LL;
public: // actually package-private
  ::java::util::LinkedList$Entry * __attribute__((aligned(__alignof__( ::java::util::AbstractSequentialList)))) first;
  ::java::util::LinkedList$Entry * last;
  jint size__;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_LinkedList__
