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

#ifndef __java_awt_MediaTracker__
#define __java_awt_MediaTracker__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Image;
        class MediaTracker;
        class MediaTracker$MediaEntry;
    }
  }
}

class java::awt::MediaTracker : public ::java::lang::Object
{

public:
  MediaTracker(::java::awt::Component *);
  virtual void addImage(::java::awt::Image *, jint);
  virtual void addImage(::java::awt::Image *, jint, jint, jint);
  virtual jboolean checkAll();
  virtual jboolean checkAll(jboolean);
  virtual jboolean isErrorAny();
  virtual JArray< ::java::lang::Object * > * getErrorsAny();
  virtual void waitForAll();
  virtual jboolean waitForAll(jlong);
  virtual jint statusAll(jboolean);
  virtual jboolean checkID(jint);
  virtual jboolean checkID(jint, jboolean);
  virtual jboolean isErrorID(jint);
  virtual JArray< ::java::lang::Object * > * getErrorsID(jint);
  virtual void waitForID(jint);
  virtual jboolean waitForID(jint, jlong);
  virtual jint statusID(jint, jboolean);
  virtual void removeImage(::java::awt::Image *);
  virtual void removeImage(::java::awt::Image *, jint);
  virtual void removeImage(::java::awt::Image *, jint, jint, jint);
  static const jint LOADING = 1;
  static const jint ABORTED = 2;
  static const jint ERRORED = 4;
  static const jint COMPLETE = 8;
public: // actually package-private
  ::java::awt::Component * __attribute__((aligned(__alignof__( ::java::lang::Object)))) target;
  ::java::awt::MediaTracker$MediaEntry * head;
  static const jlong serialVersionUID = -483174189758638095LL;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_MediaTracker__
