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

#ifndef __gnu_javax_imageio_jpeg_JPEGImageInputStream__
#define __gnu_javax_imageio_jpeg_JPEGImageInputStream__

#pragma interface

#include <javax/imageio/stream/ImageInputStreamImpl.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace imageio
      {
        namespace jpeg
        {
            class JPEGImageInputStream;
        }
      }
    }
  }
  namespace javax
  {
    namespace imageio
    {
      namespace stream
      {
          class ImageInputStream;
      }
    }
  }
}

class gnu::javax::imageio::jpeg::JPEGImageInputStream : public ::javax::imageio::stream::ImageInputStreamImpl
{

public:
  JPEGImageInputStream(::javax::imageio::stream::ImageInputStream *);
  virtual jint read();
  virtual jint read(JArray< jbyte > *, jint, jint);
private:
  jbyte pullByte();
public:
  virtual jbyte getMarker();
  virtual jint readBit();
  virtual jbyte findNextMarker();
private:
  ::javax::imageio::stream::ImageInputStream * __attribute__((aligned(__alignof__( ::javax::imageio::stream::ImageInputStreamImpl)))) in;
public: // actually package-private
  jbyte marker;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_imageio_jpeg_JPEGImageInputStream__
