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

#ifndef __java_util_concurrent_ArrayBlockingQueue__
#define __java_util_concurrent_ArrayBlockingQueue__

#pragma interface

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


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

public: // actually package-private
  virtual jint inc(jint);
private:
  void insert(::java::lang::Object *);
  ::java::lang::Object * extract();
public: // actually package-private
  virtual void removeAt(jint);
public:
  ArrayBlockingQueue(jint);
  ArrayBlockingQueue(jint, jboolean);
  ArrayBlockingQueue(jint, jboolean, ::java::util::Collection *);
  virtual jboolean add(::java::lang::Object *);
  virtual jboolean offer(::java::lang::Object *);
  virtual void put(::java::lang::Object *);
  virtual jboolean offer(::java::lang::Object *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::lang::Object * poll();
  virtual ::java::lang::Object * take();
  virtual ::java::lang::Object * poll(jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::lang::Object * peek();
  virtual jint size();
  virtual jint remainingCapacity();
  virtual jboolean remove(::java::lang::Object *);
  virtual jboolean contains(::java::lang::Object *);
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  virtual ::java::lang::String * toString();
  virtual void clear();
  virtual jint drainTo(::java::util::Collection *);
  virtual jint drainTo(::java::util::Collection *, jint);
  virtual ::java::util::Iterator * iterator();
public: // actually package-private
  static jint access$0(::java::util::concurrent::ArrayBlockingQueue *);
  static jint access$1(::java::util::concurrent::ArrayBlockingQueue *);
  static JArray< ::java::lang::Object * > * access$2(::java::util::concurrent::ArrayBlockingQueue *);
  static jint access$3(::java::util::concurrent::ArrayBlockingQueue *);
  static ::java::util::concurrent::locks::ReentrantLock * access$4(::java::util::concurrent::ArrayBlockingQueue *);
private:
  static const jlong serialVersionUID = -817911632652898426LL;
  JArray< ::java::lang::Object * > * __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) items;
  jint takeIndex;
  jint putIndex;
  jint count;
  ::java::util::concurrent::locks::ReentrantLock * lock;
  ::java::util::concurrent::locks::Condition * notEmpty;
  ::java::util::concurrent::locks::Condition * notFull;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_ArrayBlockingQueue__
