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

#ifndef __java_util_Vector__
#define __java_util_Vector__

#pragma interface

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


class java::util::Vector : public ::java::util::AbstractList
{

public:
  Vector();
  Vector(::java::util::Collection *);
  Vector(jint, jint);
  Vector(jint);
  virtual void copyInto(JArray< ::java::lang::Object * > *);
  virtual void trimToSize();
  virtual void ensureCapacity(jint);
  virtual void setSize(jint);
  virtual jint capacity();
  virtual jint size();
  virtual jboolean isEmpty();
  virtual ::java::util::Enumeration * elements();
  virtual jboolean contains(::java::lang::Object *);
  virtual jint indexOf(::java::lang::Object *);
  virtual jint indexOf(::java::lang::Object *, jint);
  virtual jint lastIndexOf(::java::lang::Object *);
  virtual jint lastIndexOf(::java::lang::Object *, jint);
  virtual ::java::lang::Object * elementAt(jint);
  virtual ::java::lang::Object * firstElement();
  virtual ::java::lang::Object * lastElement();
  virtual void setElementAt(::java::lang::Object *, jint);
  virtual void removeElementAt(jint);
  virtual void insertElementAt(::java::lang::Object *, jint);
  virtual void addElement(::java::lang::Object *);
  virtual jboolean removeElement(::java::lang::Object *);
  virtual void removeAllElements();
  virtual ::java::lang::Object * clone();
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  virtual ::java::lang::Object * get(jint);
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual jboolean add(::java::lang::Object *);
  virtual jboolean remove(::java::lang::Object *);
  virtual void add(jint, ::java::lang::Object *);
  virtual ::java::lang::Object * remove(jint);
  virtual void clear();
  virtual jboolean containsAll(::java::util::Collection *);
  virtual jboolean addAll(::java::util::Collection *);
  virtual jboolean removeAll(::java::util::Collection *);
  virtual jboolean retainAll(::java::util::Collection *);
  virtual jboolean addAll(jint, ::java::util::Collection *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
  virtual ::java::util::List * subList(jint, jint);
public: // actually protected
  virtual void removeRange(jint, jint);
private:
  void checkBoundInclusive(jint);
  void checkBoundExclusive(jint);
  void raiseBoundsError(jint, ::java::lang::String *);
  void writeObject(::java::io::ObjectOutputStream *);
  static const jlong serialVersionUID = -2767605614048989439LL;
public: // actually protected
  JArray< ::java::lang::Object * > * __attribute__((aligned(__alignof__( ::java::util::AbstractList)))) elementData;
  jint elementCount;
  jint capacityIncrement;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Vector__
