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

#ifndef __javax_swing_DefaultListModel__
#define __javax_swing_DefaultListModel__

#pragma interface

#include <javax/swing/AbstractListModel.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class DefaultListModel;
    }
  }
}

class javax::swing::DefaultListModel : public ::javax::swing::AbstractListModel
{

public:
  DefaultListModel();
  virtual ::java::lang::Object * elementAt(jint);
  virtual ::java::lang::String * toString();
  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 * get(jint);
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual void add(jint, ::java::lang::Object *);
  virtual void addElement(::java::lang::Object *);
  virtual jint size();
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual jboolean contains(::java::lang::Object *);
  virtual void copyInto(JArray< ::java::lang::Object * > *);
  virtual void clear();
  virtual ::java::lang::Object * remove(jint);
  virtual jboolean isEmpty();
  virtual ::java::util::Enumeration * elements();
  virtual void trimToSize();
  virtual void ensureCapacity(jint);
  virtual void setSize(jint);
  virtual jint capacity();
  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 jboolean removeElement(::java::lang::Object *);
  virtual void removeAllElements();
  virtual void removeRange(jint, jint);
  virtual jint getSize();
  virtual ::java::lang::Object * getElementAt(jint);
private:
  static const jlong serialVersionUID = 2315945659722172272LL;
  ::java::util::Vector * __attribute__((aligned(__alignof__( ::javax::swing::AbstractListModel)))) elements__;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_DefaultListModel__
