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

#ifndef __javax_imageio_spi_ImageInputStreamSpi__
#define __javax_imageio_spi_ImageInputStreamSpi__

#pragma interface

#include <javax/imageio/spi/IIOServiceProvider.h>
extern "Java"
{
  namespace javax
  {
    namespace imageio
    {
      namespace spi
      {
          class ImageInputStreamSpi;
      }
      namespace stream
      {
          class ImageInputStream;
      }
    }
  }
}

class javax::imageio::spi::ImageInputStreamSpi : public ::javax::imageio::spi::IIOServiceProvider
{

public: // actually protected
  ImageInputStreamSpi();
public:
  ImageInputStreamSpi(::java::lang::String *, ::java::lang::String *, ::java::lang::Class *);
  virtual ::java::lang::Class * getInputClass();
  virtual jboolean canUseCacheFile();
  virtual jboolean needsCacheFile();
  virtual ::javax::imageio::stream::ImageInputStream * createInputStreamInstance(::java::lang::Object *, jboolean, ::java::io::File *) = 0;
  virtual ::javax::imageio::stream::ImageInputStream * createInputStreamInstance(::java::lang::Object *);
public: // actually protected
  ::java::lang::Class * __attribute__((aligned(__alignof__( ::javax::imageio::spi::IIOServiceProvider)))) inputClass;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_imageio_spi_ImageInputStreamSpi__
