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

#ifndef __java_util_concurrent_SynchronousQueue__
#define __java_util_concurrent_SynchronousQueue__

#pragma interface

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


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

public:
  SynchronousQueue();
  SynchronousQueue(jboolean);
  virtual void put(::java::lang::Object *);
  virtual jboolean offer(::java::lang::Object *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual jboolean offer(::java::lang::Object *);
  virtual ::java::lang::Object * take();
  virtual ::java::lang::Object * poll(jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::lang::Object * poll();
  virtual jboolean isEmpty();
  virtual jint size();
  virtual jint remainingCapacity();
  virtual void clear();
  virtual jboolean contains(::java::lang::Object *);
  virtual jboolean remove(::java::lang::Object *);
  virtual jboolean containsAll(::java::util::Collection *);
  virtual jboolean removeAll(::java::util::Collection *);
  virtual jboolean retainAll(::java::util::Collection *);
  virtual ::java::lang::Object * peek();
  virtual ::java::util::Iterator * iterator();
  virtual JArray< ::java::lang::Object * > * toArray();
  virtual JArray< ::java::lang::Object * > * toArray(JArray< ::java::lang::Object * > *);
  virtual jint drainTo(::java::util::Collection *);
  virtual jint drainTo(::java::util::Collection *, jint);
private:
  void writeObject(::java::io::ObjectOutputStream *);
  void readObject(::java::io::ObjectInputStream *);
  static const jlong serialVersionUID = -3223113410248163686LL;
public: // actually package-private
  static jint NCPUS;
  static jint maxTimedSpins;
  static jint maxUntimedSpins;
  static const jlong spinForTimeoutThreshold = 1000LL;
private:
  ::java::util::concurrent::SynchronousQueue$Transferer * volatile __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) transferer;
  ::java::util::concurrent::locks::ReentrantLock * qlock;
  ::java::util::concurrent::SynchronousQueue$WaitQueue * waitingProducers;
  ::java::util::concurrent::SynchronousQueue$WaitQueue * waitingConsumers;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_SynchronousQueue__
