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

#ifndef __java_util_concurrent_DelayQueue__
#define __java_util_concurrent_DelayQueue__

#pragma interface

#include <java/util/AbstractQueue.h>
#include <gcj/array.h>


class java::util::concurrent::DelayQueue : public ::java::util::AbstractQueue
{

public:
  DelayQueue();
  DelayQueue(::java::util::Collection *);
  virtual jboolean DelayQueue$add(::java::util::concurrent::Delayed *);
  virtual jboolean DelayQueue$offer(::java::util::concurrent::Delayed *);
  virtual void DelayQueue$put(::java::util::concurrent::Delayed *);
  virtual jboolean DelayQueue$offer(::java::util::concurrent::Delayed *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::util::concurrent::Delayed * DelayQueue$poll();
  virtual ::java::util::concurrent::Delayed * DelayQueue$take();
  virtual ::java::util::concurrent::Delayed * DelayQueue$poll(jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::util::concurrent::Delayed * DelayQueue$peek();
  virtual jint size();
  virtual jint drainTo(::java::util::Collection *);
  virtual jint drainTo(::java::util::Collection *, jint);
  virtual void clear();
  virtual jint remainingCapacity();
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  virtual jboolean remove(::java::lang::Object *);
  virtual ::java::util::Iterator * iterator();
  virtual ::java::lang::Object * poll(jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::lang::Object * poll();
  virtual ::java::lang::Object * take();
  virtual jboolean offer(::java::lang::Object *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual jboolean offer(::java::lang::Object *);
  virtual ::java::lang::Object * peek();
  virtual jboolean add(::java::lang::Object *);
  virtual void put(::java::lang::Object *);
public: // actually package-private
  static ::java::util::concurrent::locks::ReentrantLock * access$8(::java::util::concurrent::DelayQueue *);
  static ::java::util::PriorityQueue * access$9(::java::util::concurrent::DelayQueue *);
private:
  ::java::util::concurrent::locks::ReentrantLock * __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) lock;
  ::java::util::concurrent::locks::Condition * available;
  ::java::util::PriorityQueue * q;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_DelayQueue__
