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

#ifndef __java_util_LinkedList$LinkedListItr__
#define __java_util_LinkedList$LinkedListItr__

#pragma interface

#include <java/lang/Object.h>

class java::util::LinkedList$LinkedListItr : public ::java::lang::Object
{

public: // actually package-private
  LinkedList$LinkedListItr(::java::util::LinkedList *, jint);
private:
  void checkMod();
public:
  jint nextIndex();
  jint previousIndex();
  jboolean hasNext();
  jboolean hasPrevious();
  ::java::lang::Object * next();
  ::java::lang::Object * previous();
  void remove();
  void add(::java::lang::Object *);
  void set(::java::lang::Object *);
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) knownMod;
  ::java::util::LinkedList$Entry * next__;
  ::java::util::LinkedList$Entry * previous__;
  ::java::util::LinkedList$Entry * lastReturned;
  jint position;
public: // actually package-private
  ::java::util::LinkedList * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_LinkedList$LinkedListItr__
