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

#ifndef __java_util_concurrent_locks_ReentrantReadWriteLock$ReadLock__
#define __java_util_concurrent_locks_ReentrantReadWriteLock$ReadLock__

#pragma interface

#include <java/lang/Object.h>

class java::util::concurrent::locks::ReentrantReadWriteLock$ReadLock : public ::java::lang::Object
{

public: // actually protected
  ReentrantReadWriteLock$ReadLock(::java::util::concurrent::locks::ReentrantReadWriteLock *);
public:
  virtual void lock();
  virtual void lockInterruptibly();
  virtual jboolean tryLock();
  virtual jboolean tryLock(jlong, ::java::util::concurrent::TimeUnit *);
  virtual void unlock();
  virtual ::java::util::concurrent::locks::Condition * newCondition();
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -5992448646407690164LL;
  ::java::util::concurrent::locks::ReentrantReadWriteLock$Sync * __attribute__((aligned(__alignof__( ::java::lang::Object)))) sync;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_locks_ReentrantReadWriteLock$ReadLock__
