From 86c9776ba2553c7c7938c07311436cc9604ef34c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 19 Mar 2001 23:00:18 +0000 Subject: [PATCH] ArrayList.java: Remove RCS keywords from comments * java/util/ArrayList.java: Remove RCS keywords from comments * java/util/BasicMapEntry.java: idem * java/util/Dictionary.java: idem * java/util/HashSet.java: idem * java/util/EventObject.java: reindent * java/util/Properties.java: idem * java/util/SortedMap.java: idem * java/util/Enumeration.java: Merge with Classpath * java/util/EventListener.java: idem * java/util/Observable.java: idem * java/util/Observer.java: idem * java/util/Stack.java: idem From-SVN: r40639 --- libjava/ChangeLog | 17 + libjava/java/util/ArrayList.java | 1 - libjava/java/util/BasicMapEntry.java | 2 - libjava/java/util/Dictionary.java | 2 - libjava/java/util/Enumeration.java | 67 ++- libjava/java/util/EventListener.java | 45 +- libjava/java/util/EventObject.java | 36 +- libjava/java/util/HashSet.java | 2 - libjava/java/util/Observable.java | 123 +++- libjava/java/util/Observer.java | 48 +- libjava/java/util/Properties.java | 866 ++++++++++++++------------- libjava/java/util/SortedMap.java | 5 +- libjava/java/util/Stack.java | 121 +++- 13 files changed, 802 insertions(+), 533 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 4ba2d8673b8..7e1049b8d25 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,20 @@ +2001-03-19 Mark Wielaard + + * java/util/ArrayList.java: Remove RCS keywords from comments + * java/util/BasicMapEntry.java: idem + * java/util/Dictionary.java: idem + * java/util/HashSet.java: idem + + * java/util/EventObject.java: reindent + * java/util/Properties.java: idem + * java/util/SortedMap.java: idem + + * java/util/Enumeration.java: Merge with Classpath + * java/util/EventListener.java: idem + * java/util/Observable.java: idem + * java/util/Observer.java: idem + * java/util/Stack.java: idem + 2001-03-17 Tom Tromey * java/lang/natString.cc (rehash): Don't bother with memset; diff --git a/libjava/java/util/ArrayList.java b/libjava/java/util/ArrayList.java index ba9c2d144b3..d6b663414a4 100644 --- a/libjava/java/util/ArrayList.java +++ b/libjava/java/util/ArrayList.java @@ -40,7 +40,6 @@ import java.io.ObjectOutputStream; * to or removing from the end of a list, checking the size, &c. * * @author Jon A. Zeppieri - * @version $Id: ArrayList.java,v 1.12 2000/12/17 07:54:39 cbj Exp $ * @see java.util.AbstractList * @see java.util.List */ diff --git a/libjava/java/util/BasicMapEntry.java b/libjava/java/util/BasicMapEntry.java index 373015edca9..f858cb4ebd9 100644 --- a/libjava/java/util/BasicMapEntry.java +++ b/libjava/java/util/BasicMapEntry.java @@ -33,8 +33,6 @@ package java.util; * Hashtable. * * @author Jon Zeppieri - * @version $Revision: 1.5 $ - * @modified $Id: BasicMapEntry.java,v 1.5 2000/10/26 10:19:00 bryce Exp $ */ class BasicMapEntry implements Map.Entry { diff --git a/libjava/java/util/Dictionary.java b/libjava/java/util/Dictionary.java index 3319c9cde57..7530e083351 100644 --- a/libjava/java/util/Dictionary.java +++ b/libjava/java/util/Dictionary.java @@ -40,8 +40,6 @@ package java.util; * in the Collections framework. * * @author Jon Zeppieri - * @version $Revision: 1.4 $ - * @modified $Id: Dictionary.java,v 1.4 2000/10/26 10:19:00 bryce Exp $ */ public abstract class Dictionary extends Object { diff --git a/libjava/java/util/Enumeration.java b/libjava/java/util/Enumeration.java index 6f7299bc072..66624bd3ab6 100644 --- a/libjava/java/util/Enumeration.java +++ b/libjava/java/util/Enumeration.java @@ -1,24 +1,65 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation +/* Enumeration.java -- Interface for enumerating lists of objects + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ package java.util; - -/** - * @author Warren Levy - * @date August 25, 1998. - */ + /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1. * Status: Believed complete and correct */ - + +/** + * Interface for lists of objects that can be returned in sequence. Successive + * objects are obtained by the nextElement method. + *

+ * As of Java 1.2, the Iterator interface provides the same functionality, but + * with shorter method names and a new optional method to remove items from the + * list. If writing for 1.2, consider using Iterator instead. Enumerations over + * the new collections classes, for use with legacy APIs that require them, can + * be obtained by the enumeration method in class Collections. + * + * @author Warren Levy + * @date August 25, 1998. + */ public interface Enumeration { - public boolean hasMoreElements(); - public Object nextElement() throws NoSuchElementException; + /** + * Tests whether there are elements remaining in the enumeration. + * + * @return true if there is at least one more element in the enumeration, + * that is, if the next call to nextElement will not throw a + * NoSuchElementException. + */ + boolean hasMoreElements(); + + /** + * Obtain the next element in the enumeration. + * + * @return the next element in the enumeration + * @exception NoSuchElementException if there are no more elements + */ + Object nextElement() throws NoSuchElementException; } diff --git a/libjava/java/util/EventListener.java b/libjava/java/util/EventListener.java index 969f324238b..387e9d1a196 100644 --- a/libjava/java/util/EventListener.java +++ b/libjava/java/util/EventListener.java @@ -1,24 +1,47 @@ -// EventListener.java - Listen for events from event source. +/* An interface that all event listener interfaces must extend + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. -/* Copyright (C) 1998, 1999 Free Software Foundation +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ - 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 Tom Tromey - * @date December 12, 1998 - */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * Status: Believed complete and correct. */ +/** + * Empty interface that is implemented by classes that need to receive + * events. Subinterfaces define methods that can be called to fire an + * event notification. Normally the name of these subinterfaces end in + * Listener and all method described by the subinterface + * take as argument an subclass of EventObject. + * + * @author Tom Tromey + * @date December 12, 1998 + */ public interface EventListener { } diff --git a/libjava/java/util/EventObject.java b/libjava/java/util/EventObject.java index dd7c0d9c816..baf927cae03 100644 --- a/libjava/java/util/EventObject.java +++ b/libjava/java/util/EventObject.java @@ -1,28 +1,28 @@ /* EventObject.java - Represent events fired by objects. Copyright (C) 1999, 2000 Free Software Foundation, Inc. - This file is part of GNU Classpath. +This file is part of GNU Classpath. - GNU Classpath is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. - GNU Classpath is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. - You should have received a copy of the GNU General Public License - along with GNU Classpath; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. - As a special exception, if you link this library with other files to - produce an executable, this library does not by itself cause the - resulting executable to be covered by the GNU General Public License. - This exception does not however invalidate any other reasons why the - executable file might be covered by the GNU General Public License. */ +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ package java.util; diff --git a/libjava/java/util/HashSet.java b/libjava/java/util/HashSet.java index 228e41931ff..2b5c31dc7fc 100644 --- a/libjava/java/util/HashSet.java +++ b/libjava/java/util/HashSet.java @@ -45,8 +45,6 @@ import java.io.ObjectOutputStream; * HashSet is a part of the JDK1.2 Collections API. * * @author Jon Zeppieri - * @version $Revision: 1.3 $ - * @modified $Id: HashSet.java,v 1.3 2001/02/15 05:12:05 bryce Exp $ */ public class HashSet extends AbstractSet implements Set, Cloneable, Serializable diff --git a/libjava/java/util/Observable.java b/libjava/java/util/Observable.java index 1a205c15363..5d4d49f7f88 100644 --- a/libjava/java/util/Observable.java +++ b/libjava/java/util/Observable.java @@ -1,30 +1,49 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation +/* java.util.Observable + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ -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 - * @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. */ - + +/** + * @author Warren Levy + * @date September 2, 1998. + */ public class Observable { - /* tracks whether this object has changed */ + /** tracks whether this object has changed */ private boolean changed; /* list of the Observers registered as interested in this Observable */ - private Vector observerVec; + private Vector observers; /* TBD: This might be better implemented as an Observer[] * but that would mean writing more code rather than making use of @@ -34,63 +53,101 @@ public class Observable * we may decide to make the tradeoff and reimplement with an Observer[]. */ + /** + * Constructs an Observable with zero Observers. + */ public Observable() { changed = false; - observerVec = new Vector(); + observers = new Vector(); } - public synchronized void addObserver(Observer obs) + /** + * Adds an Observer. If the observer was already added this method does + * nothing. + * + * @param observer Observer to add. + */ + public synchronized void addObserver(Observer observer) { - // JDK 1.2 spec says not to add this if it is already there - if (!observerVec.contains(obs)) - observerVec.addElement(obs); + if (!observers.contains(observer)) + observers.addElement(observer); } + /** + * Reset this Observable's state to unchanged. + */ protected synchronized void clearChanged() { changed = false; } + /** + * @return Number of Observers for this Observable. + */ public synchronized int countObservers() { - return observerVec.size(); + return observers.size(); } - public synchronized void deleteObserver(Observer obs) + /** + * Deletes an Observer of this Observable. + * + * @param victim Observer to delete. + */ + public synchronized void deleteObserver(Observer victim) { - observerVec.removeElement(obs); + observers.removeElement(victim); } + /** + * Deletes all Observers of this Observable. + */ public synchronized void deleteObservers() { - observerVec.removeAllElements(); + observers.removeAllElements(); } + /** + * @return Whether or not this Observable has changed. + */ public synchronized boolean hasChanged() { return changed; } + /** + * If the Observable has actually changed then tell all Observers about it, + * then resets state to unchanged. + */ public void notifyObservers() { notifyObservers(null); } - public void notifyObservers(Object arg) + /** + * If the Observable has actually changed then tell all Observers about it, + * then resets state to unchanged. + * Note that though the order of notification is unspecified in subclasses, + * in Observable it is in the order of registration. + * + * @param obj Arguement to Observer's update method. + */ + public void notifyObservers(Object obj) { - 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; - } + if (!hasChanged()) + return; + Vector ob1 = (Vector) observers.clone(); + + for (int i = 0; i < ob1.size(); i++) + ((Observer) ob1.elementAt(i)).update(this, obj); + + clearChanged(); } + /** + * Marks this Observable as having changed. + */ protected synchronized void setChanged() { changed = true; diff --git a/libjava/java/util/Observer.java b/libjava/java/util/Observer.java index 3dc86ae7512..67197986a90 100644 --- a/libjava/java/util/Observer.java +++ b/libjava/java/util/Observer.java @@ -1,24 +1,48 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation +/* Implemented when a class wants to be informed of changes in Observable + objects. + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ -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 - * @date August 25, 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 */ - + +/** + * Interface that is implemented when a class wants to be informed of changes + * in Observable objects. + * + * @see java.util.Observable + * @author Warren Levy + * @date August 25, 1998. + */ public interface Observer { - public void update(Observable observed, Object arg); + public void update(Observable observable, Object arg); } diff --git a/libjava/java/util/Properties.java b/libjava/java/util/Properties.java index 3f51d479f5c..dc679faf126 100644 --- a/libjava/java/util/Properties.java +++ b/libjava/java/util/Properties.java @@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - + GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU @@ -62,427 +62,477 @@ import java.io.*; * * @see PropertyResourceBundle * @author Jochen Hoenicke */ -public class Properties extends Hashtable { - /** - * The property list that contains default values for any keys not - * in this property list. - */ - protected Properties defaults; +public class Properties extends Hashtable +{ + /** + * The property list that contains default values for any keys not + * in this property list. + */ + protected Properties defaults; + + private static final long serialVersionUID = 4112578634029874840L; - private static final long serialVersionUID = 4112578634029874840L; + /** + * Creates a new empty property list. + */ + public Properties() + { + this.defaults = null; + } - /** - * Creates a new empty property list. - */ - public Properties() { - this.defaults = null; - } + /** + * Create a new empty property list with the specified default values. + * @param defaults a Properties object containing the default values. + */ + public Properties(Properties defaults) + { + this.defaults = defaults; + } + + /** + * Reads a property list from an input stream. The stream should + * have the following format:
+ * + * An empty line or a line starting with # or + * ! is ignored. An backslash (\) at the + * end of the line makes the line continueing on the next line + * (but make sure there is no whitespace after the backslash). + * Otherwise, each line describes a key/value pair.
+ * + * The chars up to the first whitespace, = or : are the key. You + * can include this caracters in the key, if you precede them with + * a backslash (\). The key is followed by optional + * whitespaces, optionally one = or :, + * and optionally some more whitespaces. The rest of the line is + * the resource belonging to the key.
+ * + * Escape sequences \t, \n, \r, \\, \", \', \!, \#, \ (a + * space), and unicode characters with the + * \uxxxx notation are detected, and + * converted to the corresponding single character.
+ * + *

+   * # This is a comment
+   * key     = value
+   * k\:5      \ a string starting with space and ending with newline\n
+   * # This is a multiline specification; note that the value contains
+   * # no white space.
+   * weekdays: Sunday,Monday,Tuesday,Wednesday,\
+   *           Thursday,Friday,Saturday
+   * # The safest way to include a space at the end of a value:
+   * label   = Name:\u0020
+   * 
+ * + * @param in the input stream + * @exception IOException if an error occured when reading + * from the input. */ + public void load(InputStream inStream) throws IOException + { + BufferedReader reader = + new BufferedReader(new InputStreamReader(inStream)); + String line; - /** - * Create a new empty property list with the specified default values. - * @param defaults a Properties object containing the default values. - */ - public Properties(Properties defaults) { - this.defaults = defaults; - } + while ((line = reader.readLine()) != null) + { + char c = 0; + int pos = 0; + while (pos < line.length() + && Character.isWhitespace(c = line.charAt(pos))) + pos++; - /** - * Reads a property list from an input stream. The stream should - * have the following format:
- * - * An empty line or a line starting with # or - * ! is ignored. An backslash (\) at the - * end of the line makes the line continueing on the next line - * (but make sure there is no whitespace after the backslash). - * Otherwise, each line describes a key/value pair.
- * - * The chars up to the first whitespace, = or : are the key. You - * can include this caracters in the key, if you precede them with - * a backslash (\). The key is followed by optional - * whitespaces, optionally one = or :, - * and optionally some more whitespaces. The rest of the line is - * the resource belonging to the key.
- * - * Escape sequences \t, \n, \r, \\, \", \', \!, \#, \ (a - * space), and unicode characters with the - * \uxxxx notation are detected, and - * converted to the corresponding single character.
- * - *
-     * # This is a comment
-     * key     = value
-     * k\:5      \ a string starting with space and ending with newline\n
-     * # This is a multiline specification; note that the value contains
-     * # no white space.
-     * weekdays: Sunday,Monday,Tuesday,Wednesday,\
-     *           Thursday,Friday,Saturday
-     * # The safest way to include a space at the end of a value:
-     * label   = Name:\u0020
-     * 
- * - * @param in the input stream - * @exception IOException if an error occured when reading - * from the input. */ - public void load(InputStream inStream) throws IOException { - BufferedReader reader = - new BufferedReader(new InputStreamReader(inStream)); - String line; - while ((line = reader.readLine()) != null) { - char c = 0; - int pos = 0; - while (pos < line.length() - && Character.isWhitespace(c = line.charAt(pos))) - pos++; + // If line is empty or begins with a comment character, + // skip this line. + if (pos == line.length() || c == '#' || c == '!') + continue; - // If line is empty or begins with a comment character, - // skip this line. - if (pos == line.length() || c == '#' || c == '!') - continue; + // The characaters up to the next Whitespace, ':', or '=' + // describe the key. But look for escape sequences. + StringBuffer key = new StringBuffer(); + while (pos < line.length() + && !Character.isWhitespace(c = line.charAt(pos++)) + && c != '=' && c != ':') + { + if (c == '\\') + { + if (pos == line.length()) + { + // The line continues on the next line. + line = reader.readLine(); + pos = 0; + while (pos < line.length() + && Character.isWhitespace(c = line.charAt(pos))) + pos++; + } + else + { + c = line.charAt(pos++); + switch (c) + { + case 'n': + key.append('\n'); + break; + case 't': + key.append('\t'); + break; + case 'r': + key.append('\r'); + break; + case 'u': + if (pos + 4 <= line.length()) + { + char uni = (char) Integer.parseInt + (line.substring(pos, pos + 4), 16); + key.append(uni); + } // else throw exception? + break; + default: + key.append(c); + break; + } + } + } + else + key.append(c); + } - // The characaters up to the next Whitespace, ':', or '=' - // describe the key. But look for escape sequences. - StringBuffer key = new StringBuffer(); - while (pos < line.length() - && !Character.isWhitespace(c = line.charAt(pos++)) - && c != '=' && c != ':') { - if (c == '\\') { - if (pos == line.length()) { - // The line continues on the next line. - line = reader.readLine(); - pos = 0; - while (pos < line.length() - && Character.isWhitespace(c = line.charAt(pos))) - pos++; - } else { - c = line.charAt(pos++); - switch (c) { - case 'n': - key.append('\n'); - break; - case 't': - key.append('\t'); - break; - case 'r': - key.append('\r'); - break; - case 'u': - if (pos+4 <= line.length()) { - char uni = (char) Integer.parseInt - (line.substring(pos, pos+4), 16); - key.append(uni); - } // else throw exception? - break; - default: - key.append(c); - break; - } - } - } else - key.append(c); - } - - boolean isDelim = (c == ':' || c == '='); - while (pos < line.length() - && Character.isWhitespace(c = line.charAt(pos))) - pos++; + boolean isDelim = (c == ':' || c == '='); + while (pos < line.length() + && Character.isWhitespace(c = line.charAt(pos))) + pos++; - if (!isDelim && (c == ':' || c == '=')) { - pos++; - while (pos < line.length() - && Character.isWhitespace(c = line.charAt(pos))) - pos++; - } + if (!isDelim && (c == ':' || c == '=')) + { + pos++; + while (pos < line.length() + && Character.isWhitespace(c = line.charAt(pos))) + pos++; + } - StringBuffer element = new StringBuffer(line.length()-pos); - while (pos < line.length()) { - c = line.charAt(pos++); - if (c == '\\') { - if (pos == line.length()) { - // The line continues on the next line. - line = reader.readLine(); - pos = 0; - while (pos < line.length() - && Character.isWhitespace(c = line.charAt(pos))) - pos++; - element.ensureCapacity(line.length()-pos+element.length()); - } else { - c = line.charAt(pos++); - switch (c) { - case 'n': - element.append('\n'); - break; - case 't': - element.append('\t'); - break; - case 'r': - element.append('\r'); - break; - case 'u': - if (pos+4 <= line.length()) { - char uni = (char) Integer.parseInt - (line.substring(pos, pos+4), 16); - element.append(uni); - } // else throw exception? - break; - default: - element.append(c); - break; - } - } - } else - element.append(c); - } - put(key.toString(), element.toString()); - } - } + StringBuffer element = new StringBuffer(line.length() - pos); + while (pos < line.length()) + { + c = line.charAt(pos++); + if (c == '\\') + { + if (pos == line.length()) + { + // The line continues on the next line. + line = reader.readLine(); + pos = 0; + while (pos < line.length() + && Character.isWhitespace(c = line.charAt(pos))) + pos++; + element.ensureCapacity(line.length() - pos + + element.length()); + } + else + { + c = line.charAt(pos++); + switch (c) + { + case 'n': + element.append('\n'); + break; + case 't': + element.append('\t'); + break; + case 'r': + element.append('\r'); + break; + case 'u': + if (pos + 4 <= line.length()) + { + char uni = (char) Integer.parseInt + (line.substring(pos, pos + 4), 16); + element.append(uni); + } // else throw exception? + break; + default: + element.append(c); + break; + } + } + } + else + element.append(c); + } + put(key.toString(), element.toString()); + } + } - /** - * Calls store(OutputStream out, String header) and - * ignores the IOException that may be thrown. - * @deprecated use store instead. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - */ - public void save(OutputStream out, String header) { - try { - store(out,header); - } catch (IOException ex) { - } - } - - /** - * Writes the key/value pairs to the given output stream.
- * - * If header is not null, this method writes a comment containing - * the header as first line to the stream. The next line (or first - * line if header is null) contains a comment with the current date. - * Afterwards the key/value pairs are written to the stream in the - * following format.
- * - * Each line has the form key = value. Newlines, - * Returns and tabs are written as \n,\t,\r resp. - * The characters \, !, #, = and : are - * preceeded by a backslash. Spaces are preceded with a backslash, - * if and only if they are at the beginning of the key. Characters - * that are not in the ascii range 33 to 127 are written in the - * \uxxxx Form. - * - * @param out the output stream - * @param header the header written in the first line, may be null. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - */ - public void store(OutputStream out, String header) throws IOException { - PrintWriter writer = new PrintWriter(out); - if (header != null) - writer.println("#"+header); - writer.println("#"+new Date().toString()); - list(writer); - writer.flush(); - } - - /** - * Adds the given key/value pair to this properties. This calls - * the hashtable method put. - * @param key the key for this property - * @param value the value for this property - * @return The old value for the given key. - * @since JDK1.2 */ - public Object setProperty(String key, String value) { - return put(key,value); - } + /** + * Calls store(OutputStream out, String header) and + * ignores the IOException that may be thrown. + * @deprecated use store instead. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + */ + public void save(OutputStream out, String header) + { + try + { + store(out, header); + } + catch (IOException ex) + { + } + } + + /** + * Writes the key/value pairs to the given output stream.
+ * + * If header is not null, this method writes a comment containing + * the header as first line to the stream. The next line (or first + * line if header is null) contains a comment with the current date. + * Afterwards the key/value pairs are written to the stream in the + * following format.
+ * + * Each line has the form key = value. Newlines, + * Returns and tabs are written as \n,\t,\r resp. + * The characters \, !, #, = and : are + * preceeded by a backslash. Spaces are preceded with a backslash, + * if and only if they are at the beginning of the key. Characters + * that are not in the ascii range 33 to 127 are written in the + * \uxxxx Form. + * + * @param out the output stream + * @param header the header written in the first line, may be null. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + */ + public void store(OutputStream out, String header) throws IOException + { + PrintWriter writer = new PrintWriter(out); + if (header != null) + writer.println("#" + header); + writer.println("#" + new Date().toString()); + list(writer); + writer.flush(); + } + + /** + * Adds the given key/value pair to this properties. This calls + * the hashtable method put. + * @param key the key for this property + * @param value the value for this property + * @return The old value for the given key. + * @since JDK1.2 */ + public Object setProperty(String key, String value) + { + return put(key, value); + } - /** - * Gets the property with the specified key in this property list. - * If the key is not found, the default property list is searched. - * If the property is not found in default or the default of - * default, null is returned. - * @param key The key for this property. - * @param defaulValue A default value - * @return The value for the given key, or null if not found. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - */ - public String getProperty(String key) { - return getProperty(key, null); - } + /** + * Gets the property with the specified key in this property list. + * If the key is not found, the default property list is searched. + * If the property is not found in default or the default of + * default, null is returned. + * @param key The key for this property. + * @param defaulValue A default value + * @return The value for the given key, or null if not found. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + */ + public String getProperty(String key) + { + return getProperty(key, null); + } - /** - * Gets the property with the specified key in this property list. If - * the key is not found, the default property list is searched. If the - * property is not found in default or the default of default, the - * specified defaultValue is returned. - * @param key The key for this property. - * @param defaulValue A default value - * @return The value for the given key. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - */ - public String getProperty(String key, String defaultValue) { - Properties prop = this; - // Eliminate tail recursion. - do { - String value = (String) prop.get(key); - if (value != null) - return value; - prop = prop.defaults; - } while (prop != null); - return defaultValue; - } + /** + * Gets the property with the specified key in this property list. If + * the key is not found, the default property list is searched. If the + * property is not found in default or the default of default, the + * specified defaultValue is returned. + * @param key The key for this property. + * @param defaulValue A default value + * @return The value for the given key. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + */ + public String getProperty(String key, String defaultValue) + { + Properties prop = this; + // Eliminate tail recursion. + do + { + String value = (String) prop.get(key); + if (value != null) + return value; + prop = prop.defaults; + } + while (prop != null); + return defaultValue; + } - private final void addHashEntries (Hashtable base) { - if (defaults != null) - defaults.addHashEntries(base); - Enumeration keys = keys (); - while (keys.hasMoreElements()) - base.put(keys.nextElement(), base); - } + private final void addHashEntries(Hashtable base) + { + if (defaults != null) + defaults.addHashEntries(base); + Enumeration keys = keys(); + while (keys.hasMoreElements()) + base.put(keys.nextElement(), base); + } - /** - * Returns an enumeration of all keys in this property list, including - * the keys in the default property list. - */ - public Enumeration propertyNames () { - // We make a new Hashtable that holds all the keys. Then we - // return an enumeration for this hash. We do this because we - // don't want modifications to be reflected in the enumeration - // (per JCL), and because there doesn't seem to be a - // particularly better way to ensure that duplicates are - // ignored. - Hashtable t = new Hashtable (); - addHashEntries (t); - return t.keys(); - } + /** + * Returns an enumeration of all keys in this property list, including + * the keys in the default property list. + */ + public Enumeration propertyNames() + { + // We make a new Hashtable that holds all the keys. Then we + // return an enumeration for this hash. We do this because we + // don't want modifications to be reflected in the enumeration + // (per JCL), and because there doesn't seem to be a + // particularly better way to ensure that duplicates are + // ignored. + Hashtable t = new Hashtable(); + addHashEntries(t); + return t.keys(); + } - /** - * Formats a key/value pair for output in a properties file. - * See store for a description of the format. - * @param key the key. - * @param value the value. - * @see #store - */ - private String formatForOutput(String key, String value) { - // This is a simple approximation of the expected line size. - StringBuffer result = new StringBuffer(key.length()+value.length()+16); - boolean head = true; - for (int i=0; i< key.length(); i++) { - char c = key.charAt(i); - switch (c) { - case '\n': - result.append("\\n"); - break; - case '\r': - result.append("\\r"); - break; - case '\t': - result.append("\\t"); - break; - case '\\': - result.append("\\\\"); - break; - case '!': - result.append("\\!"); - break; - case '#': - result.append("\\#"); - break; - case '=': - result.append("\\="); - break; - case ':': - result.append("\\:"); - break; - case ' ': - result.append("\\ "); - break; - default: - if (c < 32 || c > '~') { - String hex = Integer.toHexString(c); - result.append("\\u0000".substring(0, 6-hex.length())); - result.append(hex); - } else - result.append(c); - } - if (c != 32) - head = false; - } - result.append('='); - head=true; - for (int i=0; i< value.length(); i++) { - char c = value.charAt(i); - switch (c) { - case '\n': - result.append("\\n"); - break; - case '\r': - result.append("\\r"); - break; - case '\t': - result.append("\\t"); - break; - case '\\': - result.append("\\\\"); - break; - case '!': - result.append("\\!"); - break; - case '#': - result.append("\\#"); - break; - case ' ': - result.append(head ? "\\ ": " "); - break; - default: - if (c < 32 || c > '~') { - String hex = Integer.toHexString(c); - result.append("\\u0000".substring(0, 6-hex.length())); - result.append(hex); - } else - result.append(c); - } - if (c != 32) - head = false; - } - return result.toString(); - } + /** + * Formats a key/value pair for output in a properties file. + * See store for a description of the format. + * @param key the key. + * @param value the value. + * @see #store + */ + private String formatForOutput(String key, String value) + { + // This is a simple approximation of the expected line size. + StringBuffer result = + new StringBuffer(key.length() + value.length() + 16); + boolean head = true; + for (int i = 0; i < key.length(); i++) + { + char c = key.charAt(i); + switch (c) + { + case '\n': + result.append("\\n"); + break; + case '\r': + result.append("\\r"); + break; + case '\t': + result.append("\\t"); + break; + case '\\': + result.append("\\\\"); + break; + case '!': + result.append("\\!"); + break; + case '#': + result.append("\\#"); + break; + case '=': + result.append("\\="); + break; + case ':': + result.append("\\:"); + break; + case ' ': + result.append("\\ "); + break; + default: + if (c < 32 || c > '~') + { + String hex = Integer.toHexString(c); + result.append("\\u0000".substring(0, 6 - hex.length())); + result.append(hex); + } + else + result.append(c); + } + if (c != 32) + head = false; + } + result.append('='); + head = true; + for (int i = 0; i < value.length(); i++) + { + char c = value.charAt(i); + switch (c) + { + case '\n': + result.append("\\n"); + break; + case '\r': + result.append("\\r"); + break; + case '\t': + result.append("\\t"); + break; + case '\\': + result.append("\\\\"); + break; + case '!': + result.append("\\!"); + break; + case '#': + result.append("\\#"); + break; + case ' ': + result.append(head ? "\\ " : " "); + break; + default: + if (c < 32 || c > '~') + { + String hex = Integer.toHexString(c); + result.append("\\u0000".substring(0, 6 - hex.length())); + result.append(hex); + } + else + result.append(c); + } + if (c != 32) + head = false; + } + return result.toString(); + } - /** - * Writes the key/value pairs to the given print stream. They are - * written in the way, described in the method store. - * @param out the stream, where the key/value pairs are written to. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - * @see #store - */ - public void list(PrintStream out) { - Enumeration keys = keys(); - Enumeration elts = elements(); - while (keys.hasMoreElements()) { - String key = (String) keys.nextElement(); - String elt = (String) elts.nextElement(); - String output = formatForOutput(key,elt); - out.println(output); - } - } + /** + * Writes the key/value pairs to the given print stream. They are + * written in the way, described in the method store. + * @param out the stream, where the key/value pairs are written to. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + * @see #store + */ + public void list(PrintStream out) + { + Enumeration keys = keys(); + Enumeration elts = elements(); + while (keys.hasMoreElements()) + { + String key = (String) keys.nextElement(); + String elt = (String) elts.nextElement(); + String output = formatForOutput(key, elt); + out.println(output); + } + } - /** - * Writes the key/value pairs to the given print writer. They are - * written in the way, described in the method store. - * @param out the writer, where the key/value pairs are written to. - * @exception ClassCastException if this property contains any key or - * value that isn't a string. - * @see #store - * @see #list(java.io.PrintStream) - * @since JDK1.1 - */ - public void list(PrintWriter out) { - Enumeration keys = keys(); - Enumeration elts = elements(); - while (keys.hasMoreElements()) { - String key = (String) keys.nextElement(); - String elt = (String) elts.nextElement(); - String output = formatForOutput(key,elt); - out.println(output); - } - } + /** + * Writes the key/value pairs to the given print writer. They are + * written in the way, described in the method store. + * @param out the writer, where the key/value pairs are written to. + * @exception ClassCastException if this property contains any key or + * value that isn't a string. + * @see #store + * @see #list(java.io.PrintStream) + * @since JDK1.1 + */ + public void list(PrintWriter out) + { + Enumeration keys = keys(); + Enumeration elts = elements(); + while (keys.hasMoreElements()) + { + String key = (String) keys.nextElement(); + String elt = (String) elts.nextElement(); + String output = formatForOutput(key, elt); + out.println(output); + } + } } diff --git a/libjava/java/util/SortedMap.java b/libjava/java/util/SortedMap.java index 594f188ae56..2de57a175ac 100644 --- a/libjava/java/util/SortedMap.java +++ b/libjava/java/util/SortedMap.java @@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - + GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU @@ -30,7 +30,8 @@ executable file might be covered by the GNU General Public License. */ package java.util; -public interface SortedMap extends Map { +public interface SortedMap extends Map +{ Comparator comparator(); Object firstKey(); SortedMap headMap(Object toKey); diff --git a/libjava/java/util/Stack.java b/libjava/java/util/Stack.java index 963513ea4e0..8647fa48b08 100644 --- a/libjava/java/util/Stack.java +++ b/libjava/java/util/Stack.java @@ -1,42 +1,89 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation +/* Stack.java - Class that provides a Last In First Out (LIFO) + datatype, known more commonly as a Stack + Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ -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 - * @date August 20, 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 */ +/** + * Stack provides a Last In First Out (LIFO) data type, commonly known + * as a Stack. + * + * Stack itself extends Vector and provides the additional methods + * for stack manipulation (push, pop, peek). + * + * @author Warren Levy + * @date August 20, 1998. + */ public class Stack extends Vector { // Could use Vector methods internally for the following methods // but have used Vector fields directly for efficiency (i.e. this // often reduces out duplicate bounds checking). - public boolean empty() + private static final long serialVersionUID = 1224463164541339165L; + + /** + * This constructor creates a new Stack, initially empty + */ + public Stack() { - return elementCount == 0; + super(); } - public synchronized Object peek() + /** + * Pushes an Object onto the top of the stack. This method is effectively + * the same as addElement(item) + * + * @param item the Object to push onto the stack + * @returns the Object pushed onto the stack + * @see java.util.Vector#addElement(java.util.Object) + */ + public Object push(Object item) { - if (elementCount == 0) - throw new EmptyStackException(); + // When growing the Stack, use the Vector routines in case more + // memory is needed. + // Note: spec indicates that this method *always* returns obj passed in! - return elementData[elementCount - 1]; + addElement(item); + return item; } + /** + * Pops an item from the stack and returns it. The item popped is + * removed from the Stack + * + * @returns the Object popped from the stack + */ public synchronized Object pop() { if (elementCount == 0) @@ -49,28 +96,44 @@ public class Stack extends Vector return obj; } - public Object push(Object obj) + /** + * Returns the top Object on the stack without removing it + * + * @returns the top Object on the stack + */ + public synchronized Object peek() { - // When growing the Stack, use the Vector routines in case more - // memory is needed. - // Note: spec indicates that this method *always* returns obj passed in! + if (elementCount == 0) + throw new EmptyStackException(); - addElement(obj); - return obj; + return elementData[elementCount - 1]; } - public synchronized int search(Object obj) + /** + * Tests if the stack is empty + * + * @returns true if the stack contains no items, false otherwise + */ + public boolean empty() { - // Return the position of obj on the stack as measured from the top; - // i.e. the top element is 1, the next element down is 2, etc. - // If obj is not on the stack, return -1 + return elementCount == 0; + } + /** + * Returns the position of an Object on the stack, with the top + * most Object being at position 1, and each Object deeper in the + * stack at depth + 1 + * + * @param o The object to search for + * @returns The 1 based depth of the Object, or -1 if the Object + * is not on the stack. + */ + public synchronized int search(Object o) + { for (int i = elementCount-1; i >=0; --i) - if (elementData[i].equals(obj)) - return elementCount - i; + if (elementData[i].equals(o)) + return elementCount - i; return -1; } - - private static final long serialVersionUID = 1224463164541339165L; } -- 2.30.2