diff options
author | Tom Tromey <tromey@gcc.gnu.org> | 2007-01-09 19:58:05 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2007-01-09 19:58:05 +0000 |
commit | 97b8365cafc3a344a22d3980b8ed885f5c6d8357 (patch) | |
tree | 996a5f57d4a68c53473382e45cb22f574cb3e4db /libjava/java/lang/ref | |
parent | c648dedbde727ca3f883bb5fd773aa4af70d3369 (diff) | |
download | gcc-97b8365cafc3a344a22d3980b8ed885f5c6d8357.zip gcc-97b8365cafc3a344a22d3980b8ed885f5c6d8357.tar.gz gcc-97b8365cafc3a344a22d3980b8ed885f5c6d8357.tar.bz2 |
Merged gcj-eclipse branch to trunk.
From-SVN: r120621
Diffstat (limited to 'libjava/java/lang/ref')
-rw-r--r-- | libjava/java/lang/ref/PhantomReference.h | 20 | ||||
-rw-r--r-- | libjava/java/lang/ref/Reference.h | 45 | ||||
-rw-r--r-- | libjava/java/lang/ref/Reference.java | 20 | ||||
-rw-r--r-- | libjava/java/lang/ref/ReferenceQueue.h | 31 | ||||
-rw-r--r-- | libjava/java/lang/ref/SoftReference.h | 21 | ||||
-rw-r--r-- | libjava/java/lang/ref/WeakReference.h | 20 | ||||
-rw-r--r-- | libjava/java/lang/ref/natReference.cc | 9 |
7 files changed, 152 insertions, 14 deletions
diff --git a/libjava/java/lang/ref/PhantomReference.h b/libjava/java/lang/ref/PhantomReference.h new file mode 100644 index 0000000..0c8a823 --- /dev/null +++ b/libjava/java/lang/ref/PhantomReference.h @@ -0,0 +1,20 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_lang_ref_PhantomReference__ +#define __java_lang_ref_PhantomReference__ + +#pragma interface + +#include <java/lang/ref/Reference.h> + +class java::lang::ref::PhantomReference : public ::java::lang::ref::Reference +{ + +public: + PhantomReference(::java::lang::Object *, ::java::lang::ref::ReferenceQueue *); + virtual ::java::lang::Object * get(); + static ::java::lang::Class class$; +}; + +#endif // __java_lang_ref_PhantomReference__ diff --git a/libjava/java/lang/ref/Reference.h b/libjava/java/lang/ref/Reference.h new file mode 100644 index 0000000..3eeaf65 --- /dev/null +++ b/libjava/java/lang/ref/Reference.h @@ -0,0 +1,45 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_lang_ref_Reference__ +#define __java_lang_ref_Reference__ + +#pragma interface + +#include <java/lang/Object.h> +extern "Java" +{ + namespace gnu + { + namespace gcj + { + class RawData; + } + } +} + +class java::lang::ref::Reference : public ::java::lang::Object +{ + +public: // actually package-private + Reference(::java::lang::Object *); + Reference(::java::lang::Object *, ::java::lang::ref::ReferenceQueue *); +private: + void create(::java::lang::Object *); +public: + virtual ::java::lang::Object * get(); + virtual void clear(); + virtual jboolean isEnqueued(); + virtual jboolean enqueue(); +public: // actually package-private + ::gnu::gcj::RawData * __attribute__((aligned(__alignof__( ::java::lang::Object)))) referent; + ::gnu::gcj::RawData * copy; + jboolean cleared; + ::java::lang::ref::ReferenceQueue * queue; + ::java::lang::ref::Reference * nextOnQueue; + static ::java::lang::Object * lock; +public: + static ::java::lang::Class class$; +}; + +#endif // __java_lang_ref_Reference__ diff --git a/libjava/java/lang/ref/Reference.java b/libjava/java/lang/ref/Reference.java index ab0c55c..a5184ce 100644 --- a/libjava/java/lang/ref/Reference.java +++ b/libjava/java/lang/ref/Reference.java @@ -1,5 +1,5 @@ /* java.lang.ref.Reference - Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2003, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -70,7 +70,7 @@ package java.lang.ref; * @author Jochen Hoenicke * @see java.util.WeakHashtable */ -public abstract class Reference +public abstract class Reference<T> { /** * The underlying object. This field is handled in a special way by @@ -105,7 +105,7 @@ public abstract class Reference * The queue this reference is registered on. This is null, if this * wasn't registered to any queue or reference was already enqueued. */ - ReferenceQueue queue; + ReferenceQueue<? super T> queue; /** * Link to the next entry on the queue. If this is null, this @@ -129,7 +129,7 @@ public abstract class Reference * class in a different package. * @param referent the object we refer to. */ - Reference(Object ref) + Reference(T ref) { create (ref); } @@ -142,7 +142,7 @@ public abstract class Reference * @param q the reference queue to register on. * @exception NullPointerException if q is null. */ - Reference(Object ref, ReferenceQueue q) + Reference(T ref, ReferenceQueue<? super T> q) { if (q == null) throw new NullPointerException(); @@ -153,20 +153,14 @@ public abstract class Reference /** * Notifies the VM that a new Reference has been created. */ - private native void create (Object o); + private native void create (T o); /** * Returns the object, this reference refers to. * @return the object, this reference refers to, or null if the * reference was cleared. */ - public Object get() - { - synchronized (lock) - { - return referent; - } - } + public native T get(); /** * Clears the reference, so that it doesn't refer to its object diff --git a/libjava/java/lang/ref/ReferenceQueue.h b/libjava/java/lang/ref/ReferenceQueue.h new file mode 100644 index 0000000..bd4a9d8 --- /dev/null +++ b/libjava/java/lang/ref/ReferenceQueue.h @@ -0,0 +1,31 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_lang_ref_ReferenceQueue__ +#define __java_lang_ref_ReferenceQueue__ + +#pragma interface + +#include <java/lang/Object.h> + +class java::lang::ref::ReferenceQueue : public ::java::lang::Object +{ + +public: + ReferenceQueue(); + virtual ::java::lang::ref::Reference * poll(); +public: // actually package-private + virtual jboolean enqueue(::java::lang::ref::Reference *); +private: + ::java::lang::ref::Reference * dequeue(); +public: + virtual ::java::lang::ref::Reference * remove(jlong); + virtual ::java::lang::ref::Reference * remove(); +private: + ::java::lang::ref::Reference * __attribute__((aligned(__alignof__( ::java::lang::Object)))) first; + ::java::lang::Object * lock; +public: + static ::java::lang::Class class$; +}; + +#endif // __java_lang_ref_ReferenceQueue__ diff --git a/libjava/java/lang/ref/SoftReference.h b/libjava/java/lang/ref/SoftReference.h new file mode 100644 index 0000000..faa98e7 --- /dev/null +++ b/libjava/java/lang/ref/SoftReference.h @@ -0,0 +1,21 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_lang_ref_SoftReference__ +#define __java_lang_ref_SoftReference__ + +#pragma interface + +#include <java/lang/ref/Reference.h> + +class java::lang::ref::SoftReference : public ::java::lang::ref::Reference +{ + +public: + SoftReference(::java::lang::Object *); + SoftReference(::java::lang::Object *, ::java::lang::ref::ReferenceQueue *); + virtual ::java::lang::Object * get(); + static ::java::lang::Class class$; +}; + +#endif // __java_lang_ref_SoftReference__ diff --git a/libjava/java/lang/ref/WeakReference.h b/libjava/java/lang/ref/WeakReference.h new file mode 100644 index 0000000..b540274 --- /dev/null +++ b/libjava/java/lang/ref/WeakReference.h @@ -0,0 +1,20 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __java_lang_ref_WeakReference__ +#define __java_lang_ref_WeakReference__ + +#pragma interface + +#include <java/lang/ref/Reference.h> + +class java::lang::ref::WeakReference : public ::java::lang::ref::Reference +{ + +public: + WeakReference(::java::lang::Object *); + WeakReference(::java::lang::Object *, ::java::lang::ref::ReferenceQueue *); + static ::java::lang::Class class$; +}; + +#endif // __java_lang_ref_WeakReference__ diff --git a/libjava/java/lang/ref/natReference.cc b/libjava/java/lang/ref/natReference.cc index 23f435f..ac7272c 100644 --- a/libjava/java/lang/ref/natReference.cc +++ b/libjava/java/lang/ref/natReference.cc @@ -1,6 +1,6 @@ // natReference.cc - Native code for References -/* Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation +/* Copyright (C) 2001, 2002, 2003, 2005, 2006 Free Software Foundation This file is part of libgcj. @@ -368,3 +368,10 @@ void add_to_hash (this); } } + +::java::lang::Object * +::java::lang::ref::Reference::get() +{ + JvSynchronize sync (lock); + return referent; +} |