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

#ifndef __java_util_concurrent_Semaphore__
#define __java_util_concurrent_Semaphore__

#pragma interface

#include <java/lang/Object.h>

class java::util::concurrent::Semaphore : public ::java::lang::Object
{

public:
  Semaphore(jint);
  Semaphore(jint, jboolean);
  virtual void acquire();
  virtual void acquireUninterruptibly();
  virtual jboolean tryAcquire();
  virtual jboolean tryAcquire(jlong, ::java::util::concurrent::TimeUnit *);
  virtual void release();
  virtual void acquire(jint);
  virtual void acquireUninterruptibly(jint);
  virtual jboolean tryAcquire(jint);
  virtual jboolean tryAcquire(jint, jlong, ::java::util::concurrent::TimeUnit *);
  virtual void release(jint);
  virtual jint availablePermits();
  virtual jint drainPermits();
public: // actually protected
  virtual void reducePermits(jint);
public:
  virtual jboolean isFair();
  virtual jboolean hasQueuedThreads();
  virtual jint getQueueLength();
public: // actually protected
  virtual ::java::util::Collection * getQueuedThreads();
public:
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -3222578661600680210LL;
  ::java::util::concurrent::Semaphore$Sync * __attribute__((aligned(__alignof__( ::java::lang::Object)))) sync;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_Semaphore__
