aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/Observable.java
diff options
context:
space:
mode:
authorTom Tromey <tromey@gcc.gnu.org>1999-04-07 14:42:40 +0000
committerTom Tromey <tromey@gcc.gnu.org>1999-04-07 14:42:40 +0000
commitee9dd3721be68b9fa63dea9aa5a1d86e66958cde (patch)
treed96801a16fdf03a5682ef98730fe333a46eef944 /libjava/java/util/Observable.java
parent140fa895c6b859f827fc4437b91775a82cd105fb (diff)
downloadgcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.zip
gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.gz
gcc-ee9dd3721be68b9fa63dea9aa5a1d86e66958cde.tar.bz2
Initial revision
From-SVN: r26263
Diffstat (limited to 'libjava/java/util/Observable.java')
-rw-r--r--libjava/java/util/Observable.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/libjava/java/util/Observable.java b/libjava/java/util/Observable.java
new file mode 100644
index 0000000..627892e
--- /dev/null
+++ b/libjava/java/util/Observable.java
@@ -0,0 +1,98 @@
+/* Copyright (C) 1998, 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package java.util;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date September 2, 1998.
+ */
+/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+ * "The Java Language Specification", ISBN 0-201-63451-1
+ * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+ * Status: Believed complete and correct.
+ */
+
+public class Observable
+{
+ /* tracks whether this object has changed */
+ private boolean changed;
+
+ /* list of the Observers registered as interested in this Observable */
+ private Vector observerVec;
+
+ /* TBD: This might be better implemented as an Observer[]
+ * but that would mean writing more code rather than making use of
+ * the existing Vector class (this also implies a larger text code
+ * space in resulting executables). The tradeoff is one of speed
+ * (manipulating the Observer[] directly) vs. size/reuse. In the future,
+ * we may decide to make the tradeoff and reimplement with an Observer[].
+ */
+
+ public Observable()
+ {
+ changed = false;
+ observerVec = new Vector();
+ }
+
+ public synchronized void addObserver(Observer obs)
+ {
+ // JDK 1.2 spec says not to add this if it is already there
+ if (!observerVec.contains(obs))
+ observerVec.addElement(obs);
+ }
+
+ protected synchronized void clearChanged()
+ {
+ changed = false;
+ }
+
+ public synchronized int countObservers()
+ {
+ return observerVec.size();
+ }
+
+ public synchronized void deleteObserver(Observer obs)
+ {
+ observerVec.removeElement(obs);
+ }
+
+ public synchronized void deleteObservers()
+ {
+ observerVec.removeAllElements();
+ }
+
+ public synchronized boolean hasChanged()
+ {
+ return changed;
+ }
+
+ public void notifyObservers()
+ {
+ notifyObservers(null);
+ }
+
+ public void notifyObservers(Object arg)
+ {
+ if (changed)
+ {
+ /* The JDK 1.2 spec states that though the order of notification
+ * is unspecified in subclasses, in Observable it is in the order
+ * of registration.
+ */
+ for (int i = 0, numObs = observerVec.size(); i < numObs; i++)
+ ((Observer) (observerVec.elementAt(i))).update(this, arg);
+ changed = false;
+ }
+ }
+
+ protected synchronized void setChanged()
+ {
+ changed = true;
+ }
+}