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

#ifndef __java_util_concurrent_atomic_AtomicLongFieldUpdater__
#define __java_util_concurrent_atomic_AtomicLongFieldUpdater__

#pragma interface

#include <java/lang/Object.h>

class java::util::concurrent::atomic::AtomicLongFieldUpdater : public ::java::lang::Object
{

public:
  static ::java::util::concurrent::atomic::AtomicLongFieldUpdater * newUpdater(::java::lang::Class *, ::java::lang::String *);
public: // actually protected
  AtomicLongFieldUpdater();
public:
  virtual jboolean compareAndSet(::java::lang::Object *, jlong, jlong) = 0;
  virtual jboolean weakCompareAndSet(::java::lang::Object *, jlong, jlong) = 0;
  virtual void set(::java::lang::Object *, jlong) = 0;
  virtual void lazySet(::java::lang::Object *, jlong) = 0;
  virtual jlong get(::java::lang::Object *) = 0;
  virtual jlong getAndSet(::java::lang::Object *, jlong);
  virtual jlong getAndIncrement(::java::lang::Object *);
  virtual jlong getAndDecrement(::java::lang::Object *);
  virtual jlong getAndAdd(::java::lang::Object *, jlong);
  virtual jlong incrementAndGet(::java::lang::Object *);
  virtual jlong decrementAndGet(::java::lang::Object *);
  virtual jlong addAndGet(::java::lang::Object *, jlong);
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_atomic_AtomicLongFieldUpdater__
