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

#ifndef __javax_swing_ProgressMonitorInputStream__
#define __javax_swing_ProgressMonitorInputStream__

#pragma interface

#include <java/io/FilterInputStream.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class ProgressMonitor;
        class ProgressMonitorInputStream;
    }
  }
}

class javax::swing::ProgressMonitorInputStream : public ::java::io::FilterInputStream
{

public:
  ProgressMonitorInputStream(::java::awt::Component *, ::java::lang::Object *, ::java::io::InputStream *);
  virtual void reset();
  virtual jint read();
  virtual jint read(JArray< jbyte > *);
  virtual jint read(JArray< jbyte > *, jint, jint);
  virtual jlong skip(jlong);
  virtual void close();
  virtual ::javax::swing::ProgressMonitor * getProgressMonitor();
private:
  void checkMonitorCanceled();
  ::javax::swing::ProgressMonitor * __attribute__((aligned(__alignof__( ::java::io::FilterInputStream)))) monitor;
  jint read__;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_ProgressMonitorInputStream__
