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

#ifndef __gnu_java_awt_Buffers__
#define __gnu_java_awt_Buffers__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
          class Buffers;
      }
    }
  }
  namespace java
  {
    namespace awt
    {
      namespace image
      {
          class DataBuffer;
      }
    }
  }
}

class gnu::java::awt::Buffers : public ::java::lang::Object
{

public:
  Buffers();
  static ::java::awt::image::DataBuffer * createBuffer(jint, ::java::lang::Object *, jint);
  static ::java::awt::image::DataBuffer * createBuffer(jint, jint);
  static ::java::awt::image::DataBuffer * createBuffer(jint, jint, jint);
  static ::java::awt::image::DataBuffer * createBufferFromData(jint, ::java::lang::Object *, jint);
  static ::java::lang::Object * getData(::java::awt::image::DataBuffer *);
  static ::java::lang::Object * getData(::java::awt::image::DataBuffer *, jint, ::java::lang::Object *, jint, jint);
  static jint smallestAppropriateTransferType(jint);
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_Buffers__
