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

#ifndef __java_awt_image_ComponentSampleModel__
#define __java_awt_image_ComponentSampleModel__

#pragma interface

#include <java/awt/image/SampleModel.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace image
      {
          class ComponentSampleModel;
          class DataBuffer;
          class SampleModel;
      }
    }
  }
}

class java::awt::image::ComponentSampleModel : public ::java::awt::image::SampleModel
{

public:
  ComponentSampleModel(jint, jint, jint, jint, jint, JArray< jint > *);
  ComponentSampleModel(jint, jint, jint, jint, jint, JArray< jint > *, JArray< jint > *);
  virtual ::java::awt::image::SampleModel * createCompatibleSampleModel(jint, jint);
  virtual ::java::awt::image::SampleModel * createSubsetSampleModel(JArray< jint > *);
  virtual ::java::awt::image::DataBuffer * createDataBuffer();
  virtual jint getOffset(jint, jint);
  virtual jint getOffset(jint, jint, jint);
  virtual JArray< jint > * getSampleSize();
  virtual jint getSampleSize(jint);
  virtual JArray< jint > * getBankIndices();
  virtual JArray< jint > * getBandOffsets();
  virtual jint getScanlineStride();
  virtual jint getPixelStride();
  virtual jint getNumDataElements();
  virtual ::java::lang::Object * getDataElements(jint, jint, ::java::lang::Object *, ::java::awt::image::DataBuffer *);
  virtual JArray< jint > * getPixel(jint, jint, JArray< jint > *, ::java::awt::image::DataBuffer *);
  virtual JArray< jint > * getPixels(jint, jint, jint, jint, JArray< jint > *, ::java::awt::image::DataBuffer *);
  virtual jint getSample(jint, jint, jint, ::java::awt::image::DataBuffer *);
  virtual void setDataElements(jint, jint, ::java::lang::Object *, ::java::awt::image::DataBuffer *);
  virtual void setPixel(jint, jint, JArray< jint > *, ::java::awt::image::DataBuffer *);
  virtual void setSample(jint, jint, jint, jint, ::java::awt::image::DataBuffer *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
public: // actually protected
  JArray< jint > * __attribute__((aligned(__alignof__( ::java::awt::image::SampleModel)))) bandOffsets;
  JArray< jint > * bankIndices;
  jint numBands;
  jint numBanks;
  jint scanlineStride;
  jint pixelStride;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_image_ComponentSampleModel__
