git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@938 379699f6-c40d-0410-875b-85095c16579estable
parent
e46cf92d68
commit
39ec800e12
@ -0,0 +1,337 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// AbstractCollection.java -- Abstract implementation of most of Collection
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
import java.lang.reflect.Array; |
||||
|
||||
/** |
||||
* A basic implementation of most of the methods in the Collection interface to |
||||
* make it easier to create a collection. To create an unmodifiable Collection, |
||||
* just subclass AbstractCollection and provide implementations of the |
||||
* iterator() and size() methods. The Iterator returned by iterator() need only |
||||
* provide implementations of hasNext() and next() (that is, it may throw an |
||||
* UnsupportedOperationException if remove() is called). To create a modifiable |
||||
* Collection, you must in addition provide an implementation of the |
||||
* add(Object) method and the Iterator returned by iterator() must provide an |
||||
* implementation of remove(). Other methods should be overridden if the |
||||
* backing data structure allows for a more efficient implementation. The |
||||
* precise implementation used by AbstractCollection is documented, so that |
||||
* subclasses can tell which methods could be implemented more efficiently. |
||||
*/ |
||||
public abstract class AbstractCollection implements Collection { |
||||
|
||||
/** |
||||
* Return an Iterator over this collection. The iterator must provide the |
||||
* hasNext and next methods and should in addition provide remove if the |
||||
* collection is modifiable. |
||||
*/ |
||||
public abstract Iterator iterator(); |
||||
|
||||
/** |
||||
* Return the number of elements in this collection. |
||||
*/ |
||||
public abstract int size(); |
||||
|
||||
/** |
||||
* Add an object to the collection. This implementation always throws an |
||||
* UnsupportedOperationException - it should be overridden if the collection |
||||
* is to be modifiable. |
||||
* |
||||
* @param o the object to add |
||||
* @return true if the add operation caused the Collection to change |
||||
* @exception UnsupportedOperationException if the add operation is not |
||||
* supported on this collection |
||||
*/ |
||||
public boolean add(Object o) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
/** |
||||
* Add all the elements of a given collection to this collection. This |
||||
* implementation obtains an Iterator over the given collection and iterates |
||||
* over it, adding each element with the add(Object) method (thus this method |
||||
* will fail with an UnsupportedOperationException if the add method does). |
||||
* |
||||
* @param c the collection to add the elements of to this collection |
||||
* @return true if the add operation caused the Collection to change |
||||
* @exception UnsupportedOperationException if the add operation is not |
||||
* supported on this collection |
||||
*/ |
||||
public boolean addAll(Collection c) { |
||||
Iterator i = c.iterator(); |
||||
boolean modified = false; |
||||
while (i.hasNext()) { |
||||
modified |= add(i.next()); |
||||
} |
||||
return modified; |
||||
} |
||||
|
||||
/** |
||||
* Remove all elements from the collection. This implementation obtains an |
||||
* iterator over the collection and calls next and remove on it repeatedly |
||||
* (thus this method will fail with an UnsupportedOperationException if the |
||||
* Iterator's remove method does) until there are no more elements to remove. |
||||
* Many implementations will have a faster way of doing this. |
||||
* |
||||
* @exception UnsupportedOperationException if the Iterator returned by |
||||
* iterator does not provide an implementation of remove |
||||
*/ |
||||
public void clear() { |
||||
Iterator i = iterator(); |
||||
while (i.hasNext()) { |
||||
i.next(); |
||||
i.remove(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Test whether this collection contains a given object. That is, if the |
||||
* collection has an element e such that (o == null ? e == null : |
||||
* o.equals(e)). This implementation obtains an iterator over the collection |
||||
* and iterates over it, testing each element for equality with the given |
||||
* object. If it is equal, true is returned. Otherwise false is returned when |
||||
* the end of the collection is reached. |
||||
* |
||||
* @param o the object to remove from this collection |
||||
* @return true if this collection contains an object equal to o |
||||
*/ |
||||
public boolean contains(Object o) { |
||||
Iterator i = iterator(); |
||||
|
||||
// This looks crazily inefficient, but it takes the test o==null outside
|
||||
// the loop, saving time, and also saves needing to store the result of
|
||||
// i.next() each time.
|
||||
if (o == null) { |
||||
while (i.hasNext()) { |
||||
if (i.next() == null) { |
||||
return true; |
||||
} |
||||
} |
||||
} else { |
||||
while (i.hasNext()) { |
||||
if (o.equals(i.next())) { |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* Tests whether this collection contains all the elements in a given |
||||
* collection. This implementation iterates over the given collection, |
||||
* testing whether each element is contained in this collection. If any one |
||||
* is not, false is returned. Otherwise true is returned. |
||||
* |
||||
* @param c the collection to test against |
||||
* @return true if this collection contains all the elements in the given |
||||
* collection |
||||
*/ |
||||
public boolean containsAll(Collection c) { |
||||
Iterator i = c.iterator(); |
||||
while (i.hasNext()) { |
||||
if (!contains(i.next())) { |
||||
return false; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Test whether this collection is empty. This implementation returns |
||||
* size() == 0. |
||||
* |
||||
* @return true if this collection is empty. |
||||
*/ |
||||
public boolean isEmpty() { |
||||
return size() == 0; |
||||
} |
||||
|
||||
/** |
||||
* Remove a single instance of an object from this collection. That is, |
||||
* remove one element e such that (o == null ? e == null : o.equals(e)), if |
||||
* such an element exists. This implementation obtains an iterator over the |
||||
* collection and iterates over it, testing each element for equality with |
||||
* the given object. If it is equal, it is removed by the iterator's remove |
||||
* method (thus this method will fail with an UnsupportedOperationException |
||||
* if the Iterator's remove method does). After the first element has been |
||||
* removed, true is returned; if the end of the collection is reached, false |
||||
* is returned. |
||||
* |
||||
* @param o the object to remove from this collection |
||||
* @return true if the remove operation caused the Collection to change, or |
||||
* equivalently if the collection did contain o. |
||||
* @exception UnsupportedOperationException if this collection's Iterator |
||||
* does not support the remove method |
||||
*/ |
||||
public boolean remove(Object o) { |
||||
Iterator i = iterator(); |
||||
|
||||
// This looks crazily inefficient, but it takes the test o==null outside
|
||||
// the loop, saving time, and also saves needing to store the result of
|
||||
// i.next() each time.
|
||||
if (o == null) { |
||||
while (i.hasNext()) { |
||||
if (i.next() == null) { |
||||
i.remove(); |
||||
return true; |
||||
} |
||||
} |
||||
} else { |
||||
while (i.hasNext()) { |
||||
if (o.equals(i.next())) { |
||||
i.remove(); |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* Remove from this collection all its elements that are contained in a given |
||||
* collection. This implementation iterates over this collection, and for |
||||
* each element tests if it is contained in the given collection. If so, it |
||||
* is removed by the Iterator's remove method (thus this method will fail |
||||
* with an UnsupportedOperationException if the Iterator's remove method |
||||
* does). |
||||
* |
||||
* @param c the collection to remove the elements of |
||||
* @return true if the remove operation caused the Collection to change |
||||
* @exception UnsupportedOperationException if this collection's Iterator |
||||
* does not support the remove method |
||||
*/ |
||||
public boolean removeAll(Collection c) { |
||||
Iterator i = iterator(); |
||||
boolean changed = false; |
||||
while (i.hasNext()) { |
||||
if (c.contains(i.next())) { |
||||
i.remove(); |
||||
changed = true; |
||||
} |
||||
} |
||||
return changed; |
||||
} |
||||
|
||||
/** |
||||
* Remove from this collection all its elements that are not contained in a |
||||
* given collection. This implementation iterates over this collection, and |
||||
* for each element tests if it is contained in the given collection. If not, |
||||
* it is removed by the Iterator's remove method (thus this method will fail |
||||
* with an UnsupportedOperationException if the Iterator's remove method |
||||
* does). |
||||
* |
||||
* @param c the collection to retain the elements of |
||||
* @return true if the remove operation caused the Collection to change |
||||
* @exception UnsupportedOperationException if this collection's Iterator |
||||
* does not support the remove method |
||||
*/ |
||||
public boolean retainAll(Collection c) { |
||||
Iterator i = iterator(); |
||||
boolean changed = false; |
||||
while (i.hasNext()) { |
||||
if (!c.contains(i.next())) { |
||||
i.remove(); |
||||
changed = true; |
||||
} |
||||
} |
||||
return changed; |
||||
} |
||||
|
||||
/** |
||||
* Return an array containing the elements of this collection. This |
||||
* implementation creates an Object array of size size() and then iterates |
||||
* over the collection, setting each element of the array from the value |
||||
* returned by the iterator. |
||||
* |
||||
* @return an array containing the elements of this collection |
||||
*/ |
||||
public Object[] toArray() { |
||||
Object[] a = new Object[size()]; |
||||
Iterator i = iterator(); |
||||
for (int pos = 0; pos < a.length; pos++) { |
||||
a[pos] = i.next(); |
||||
} |
||||
return a; |
||||
} |
||||
|
||||
/** |
||||
* Copy the collection into a given array if it will fit, or into a |
||||
* dynamically created array of the same run-time type as the given array if |
||||
* not. If there is space remaining in the array, the first element after the |
||||
* end of the collection is set to null (this is only useful if the |
||||
* collection is known to contain no null elements, however). This |
||||
* implementation first tests whether the given array is large enough to hold |
||||
* all the elements of the collection. If not, the reflection API is used to |
||||
* allocate a new array of the same run-time type. Next an iterator is |
||||
* obtained over the collection and the elements are placed in the array as |
||||
* they are returned by the iterator. Finally the first spare element, if |
||||
* any, of the array is set to null, and the created array is returned. |
||||
* |
||||
* @param a the array to copy into, or of the correct run-time type |
||||
* @return the array that was produced |
||||
* @exception ClassCastException if the type of the array precludes holding |
||||
* one of the elements of the Collection |
||||
*/ |
||||
public Object[] toArray(Object[] a) { |
||||
final int n = size(); |
||||
if (a.length < n) { |
||||
a = (Object[])Array.newInstance(a.getClass().getComponentType(), n); |
||||
} |
||||
Iterator i = iterator(); |
||||
for (int pos = 0; pos < n; pos++) { |
||||
a[pos] = i.next(); |
||||
} |
||||
if (a.length > n) { |
||||
a[n] = null; |
||||
} |
||||
return a; |
||||
} |
||||
|
||||
/** |
||||
* Creates a String representation of the Collection. The string returned is |
||||
* of the form "[a, b, ...]" where a and b etc are the results of calling |
||||
* toString on the elements of the collection. This implementation obtains an |
||||
* Iterator over the Collection and adds each element to a StringBuffer as it |
||||
* is returned by the iterator. |
||||
* |
||||
* @return a String representation of the Collection |
||||
*/ |
||||
public String toString() { |
||||
StringBuffer s = new StringBuffer(); |
||||
s.append('['); |
||||
Iterator i = iterator(); |
||||
boolean more = i.hasNext(); |
||||
while(more) { |
||||
s.append(i.next()); |
||||
if (more = i.hasNext()) { |
||||
s.append(", "); |
||||
} |
||||
} |
||||
s.append(']'); |
||||
return s.toString(); |
||||
} |
||||
} |
@ -0,0 +1,551 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// AbstractList.java -- Abstract implementation of most of List
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comments for almost everything.
|
||||
// ~ Better general commenting
|
||||
|
||||
package jode.util; |
||||
import java.util.NoSuchElementException; |
||||
|
||||
/** |
||||
* A basic implementation of most of the methods in the List interface to make |
||||
* it easier to create a List based on a random-access data structure. To |
||||
* create an unmodifiable list, it is only necessary to override the size() and |
||||
* get(int) methods (this contrasts with all other abstract collection classes |
||||
* which require an iterator to be provided). To make the list modifiable, the |
||||
* set(int, Object) method should also be overridden, and to make the list |
||||
* resizable, the add(int, Object) and remove(int) methods should be overridden |
||||
* too. Other methods should be overridden if the backing data structure allows |
||||
* for a more efficient implementation. The precise implementation used by |
||||
* AbstractList is documented, so that subclasses can tell which methods could |
||||
* be implemented more efficiently. |
||||
*/ |
||||
public abstract class AbstractList extends AbstractCollection implements List { |
||||
|
||||
/** |
||||
* A count of the number of structural modifications that have been made to |
||||
* the list (that is, insertions and removals). |
||||
*/ |
||||
protected transient int modCount = 0; |
||||
|
||||
public abstract Object get(int index); |
||||
|
||||
public void add(int index, Object o) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public boolean add(Object o) { |
||||
add(size(), o); |
||||
return true; |
||||
} |
||||
|
||||
public boolean addAll(int index, Collection c) { |
||||
Iterator i = c.iterator(); |
||||
if (i.hasNext()) { |
||||
do { |
||||
add(index++, i.next()); |
||||
} while (i.hasNext()); |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
public void clear() { |
||||
removeRange(0, size()); |
||||
} |
||||
|
||||
public boolean equals(Object o) { |
||||
if (o == this) { |
||||
return true; |
||||
} else if (!(o instanceof List)) { |
||||
return false; |
||||
} else { |
||||
Iterator i1 = iterator(); |
||||
Iterator i2 = ((List)o).iterator(); |
||||
while (i1.hasNext()) { |
||||
if (!i2.hasNext()) { |
||||
return false; |
||||
} else { |
||||
Object e = i1.next(); |
||||
if (e == null ? i2.next() != null : !e.equals(i2.next())) { |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
if (i2.hasNext()) { |
||||
return false; |
||||
} else { |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public int hashCode() { |
||||
int hashCode = 1; |
||||
Iterator i = iterator(); |
||||
while (i.hasNext()) { |
||||
Object obj = i.next(); |
||||
hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode()); |
||||
} |
||||
return hashCode; |
||||
} |
||||
|
||||
public int indexOf(Object o) { |
||||
int index = 0; |
||||
ListIterator i = listIterator(); |
||||
if (o == null) { |
||||
while (i.hasNext()) { |
||||
if (i.next() == null) { |
||||
return index; |
||||
} |
||||
index++; |
||||
} |
||||
} else { |
||||
while (i.hasNext()) { |
||||
if (o.equals(i.next())) { |
||||
return index; |
||||
} |
||||
index++; |
||||
} |
||||
} |
||||
return -1; |
||||
} |
||||
|
||||
public Iterator iterator() { |
||||
return new Iterator() { |
||||
private int knownMod = modCount; |
||||
private int position = 0; |
||||
boolean removed = true; |
||||
|
||||
private void checkMod() { |
||||
if (knownMod != modCount) { |
||||
throw new ConcurrentModificationException(); |
||||
} |
||||
} |
||||
|
||||
public boolean hasNext() { |
||||
checkMod(); |
||||
return position < size(); |
||||
} |
||||
|
||||
public Object next() { |
||||
checkMod(); |
||||
removed = false; |
||||
try { |
||||
return get(position++); |
||||
} catch (IndexOutOfBoundsException e) { |
||||
throw new NoSuchElementException(); |
||||
} |
||||
} |
||||
|
||||
public void remove() { |
||||
checkMod(); |
||||
if (removed) { |
||||
throw new IllegalStateException(); |
||||
} |
||||
AbstractList.this.remove(--position); |
||||
knownMod = modCount; |
||||
removed = true; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
public int lastIndexOf(Object o) { |
||||
int index = size(); |
||||
ListIterator i = listIterator(index); |
||||
if (o == null) { |
||||
while (i.hasPrevious()) { |
||||
if (i.previous() == null) { |
||||
return index; |
||||
} |
||||
index--; |
||||
} |
||||
} else { |
||||
while (i.hasPrevious()) { |
||||
if (o.equals(i.previous())) { |
||||
return index; |
||||
} |
||||
index--; |
||||
} |
||||
} |
||||
return -1; |
||||
} |
||||
|
||||
public ListIterator listIterator() { |
||||
return listIterator(0); |
||||
} |
||||
|
||||
public ListIterator listIterator(final int index) { |
||||
|
||||
if (index < 0 || index > size()) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
|
||||
return new ListIterator() { |
||||
private int knownMod = modCount; |
||||
private int position = index; |
||||
private int lastReturned = -1; |
||||
|
||||
private void checkMod() { |
||||
if (knownMod != modCount) { |
||||
throw new ConcurrentModificationException(); |
||||
} |
||||
} |
||||
|
||||
public boolean hasNext() { |
||||
checkMod(); |
||||
return position < size(); |
||||
} |
||||
|
||||
public boolean hasPrevious() { |
||||
checkMod(); |
||||
return position > 0; |
||||
} |
||||
|
||||
public Object next() { |
||||
checkMod(); |
||||
if (hasNext()) { |
||||
lastReturned = position++; |
||||
return get(lastReturned); |
||||
} else { |
||||
throw new NoSuchElementException(); |
||||
} |
||||
} |
||||
|
||||
public Object previous() { |
||||
checkMod(); |
||||
if (hasPrevious()) { |
||||
lastReturned = --position; |
||||
return get(lastReturned); |
||||
} else { |
||||
throw new NoSuchElementException(); |
||||
} |
||||
} |
||||
|
||||
public int nextIndex() { |
||||
checkMod(); |
||||
return position; |
||||
} |
||||
|
||||
public int previousIndex() { |
||||
checkMod(); |
||||
return position - 1; |
||||
} |
||||
|
||||
public void remove() { |
||||
checkMod(); |
||||
if (lastReturned < 0) { |
||||
throw new IllegalStateException(); |
||||
} |
||||
AbstractList.this.remove(lastReturned); |
||||
knownMod = modCount; |
||||
position = lastReturned; |
||||
lastReturned = -1; |
||||
} |
||||
|
||||
public void set(Object o) { |
||||
checkMod(); |
||||
if (lastReturned < 0) { |
||||
throw new IllegalStateException(); |
||||
} |
||||
AbstractList.this.set(lastReturned, o); |
||||
} |
||||
|
||||
public void add(Object o) { |
||||
checkMod(); |
||||
AbstractList.this.add(position++, o); |
||||
lastReturned = -1; |
||||
knownMod = modCount; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
public Object remove(int index) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
/** |
||||
* Remove a subsection of the list. This is called by the clear and |
||||
* removeRange methods of the class which implements subList, which are |
||||
* difficult for subclasses to override directly. Therefore, this method |
||||
* should be overridden instead by the more efficient implementation, if one |
||||
* exists. |
||||
* <p> |
||||
* This implementation first checks for illegal or out of range arguments. It |
||||
* then obtains a ListIterator over the list using listIterator(fromIndex). |
||||
* It then calls next() and remove() on this iterator repeatedly, toIndex - |
||||
* fromIndex times. |
||||
* |
||||
* @param fromIndex the index, inclusive, to remove from. |
||||
* @param toIndex the index, exclusive, to remove to. |
||||
* @exception UnsupportedOperationException if this list does not support |
||||
* the removeRange operation. |
||||
* @exception IndexOutOfBoundsException if fromIndex > toIndex || fromIndex < |
||||
* 0 || toIndex > size(). |
||||
*/ |
||||
protected void removeRange(int fromIndex, int toIndex) { |
||||
if (fromIndex > toIndex) { |
||||
throw new IllegalArgumentException(); |
||||
} else if (fromIndex < 0 || toIndex > size()) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} else { |
||||
ListIterator i = listIterator(fromIndex); |
||||
for (int index = fromIndex; index < toIndex; index++) { |
||||
i.next(); |
||||
i.remove(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public Object set(int index, Object o) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public List subList(final int fromIndex, final int toIndex) { |
||||
|
||||
// Note that within this class two fields called modCount are inherited -
|
||||
// one from the superclass, and one from the outer class. These are
|
||||
// explicitly disambiguated in the code by referring to "this.modCount"
|
||||
// and "AbstractList.this.modCount".
|
||||
// The code uses both these two fields and *no other* to provide fail-fast
|
||||
// behaviour. For correct operation, the two fields should contain equal
|
||||
// values. Therefore, if this.modCount != AbstractList.this.modCount, there
|
||||
// has been a concurrent modification. This is all achieved purely by using
|
||||
// the modCount field, precisely according to the docs of AbstractList.
|
||||
// See the methods upMod and checkMod.
|
||||
|
||||
return new AbstractList() { |
||||
|
||||
private final int offset = fromIndex; |
||||
private int size = toIndex - fromIndex; |
||||
|
||||
{ // This is an instance initializer, called whenever this anonymous
|
||||
// class is instantiated.
|
||||
upMod(); |
||||
} |
||||
|
||||
/** |
||||
* This method checks the two modCount fields to ensure that there has |
||||
* not been a concurrent modification. It throws an exception if there |
||||
* has been, and otherwise returns normally. |
||||
* Note that since this method is private, it will be inlined. |
||||
* |
||||
* @exception ConcurrentModificationException if there has been a |
||||
* concurrent modification. |
||||
*/ |
||||
private void checkMod() { |
||||
if (this.modCount != AbstractList.this.modCount) { |
||||
throw new ConcurrentModificationException(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* This method is called after every method that causes a structural |
||||
* modification to the backing list. It updates the local modCount field |
||||
* to match that of the backing list. |
||||
* Note that since this method is private, it will be inlined. |
||||
*/ |
||||
private void upMod() { |
||||
this.modCount = AbstractList.this.modCount; |
||||
} |
||||
|
||||
/** |
||||
* This method checks that a value is between 0 and size (inclusive). If |
||||
* it is not, an exception is thrown. |
||||
* Note that since this method is private, it will be inlined. |
||||
* |
||||
* @exception IndexOutOfBoundsException if the value is out of range. |
||||
*/ |
||||
private void checkBoundsInclusive(int index) { |
||||
if (index < 0 || index > size) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* This method checks that a value is between 0 (inclusive) and size |
||||
* (exclusive). If it is not, an exception is thrown. |
||||
* Note that since this method is private, it will be inlined. |
||||
* |
||||
* @exception IndexOutOfBoundsException if the value is out of range. |
||||
*/ |
||||
private void checkBoundsExclusive(int index) { |
||||
if (index < 0 || index >= size) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
} |
||||
|
||||
public int size() { |
||||
checkMod(); |
||||
return size; |
||||
} |
||||
|
||||
public Iterator iterator() { |
||||
return listIterator(); |
||||
} |
||||
|
||||
public ListIterator listIterator(final int index) { |
||||
|
||||
checkMod(); |
||||
checkBoundsInclusive(index); |
||||
|
||||
return new ListIterator() { |
||||
ListIterator i = AbstractList.this.listIterator(index + offset); |
||||
int position = index; |
||||
|
||||
public boolean hasNext() { |
||||
checkMod(); |
||||
return position < size; |
||||
} |
||||
|
||||
public boolean hasPrevious() { |
||||
checkMod(); |
||||
return position > 0; |
||||
} |
||||
|
||||
public Object next() { |
||||
if (position < size) { |
||||
Object o = i.next(); |
||||
position++; |
||||
return o; |
||||
} else { |
||||
throw new NoSuchElementException(); |
||||
} |
||||
} |
||||
|
||||
public Object previous() { |
||||
if (position > 0) { |
||||
Object o = i.previous(); |
||||
position--; |
||||
return o; |
||||
} else { |
||||
throw new NoSuchElementException(); |
||||
} |
||||
} |
||||
|
||||
public int nextIndex() { |
||||
return offset + i.nextIndex(); |
||||
} |
||||
|
||||
public int previousIndex() { |
||||
return offset + i.previousIndex(); |
||||
} |
||||
|
||||
public void remove() { |
||||
i.remove(); |
||||
upMod(); |
||||
size--; |
||||
position = nextIndex(); |
||||
} |
||||
|
||||
public void set(Object o) { |
||||
i.set(o); |
||||
} |
||||
|
||||
public void add(Object o) { |
||||
i.add(o); |
||||
upMod(); |
||||
size++; |
||||
position++; |
||||
} |
||||
|
||||
// Here is the reason why the various modCount fields are mostly
|
||||
// ignored in this wrapper listIterator.
|
||||
// IF the backing listIterator is failfast, then the following holds:
|
||||
// Using any other method on this list will call a corresponding
|
||||
// method on the backing list *after* the backing listIterator
|
||||
// is created, which will in turn cause a ConcurrentModException
|
||||
// when this listIterator comes to use the backing one. So it is
|
||||
// implicitly failfast.
|
||||
// If the backing listIterator is NOT failfast, then the whole of
|
||||
// this list isn't failfast, because the modCount field of the
|
||||
// backing list is not valid. It would still be *possible* to
|
||||
// make the iterator failfast wrt modifications of the sublist
|
||||
// only, but somewhat pointless when the list can be changed under
|
||||
// us.
|
||||
// Either way, no explicit handling of modCount is needed.
|
||||
// However upMod() must be called in add and remove, and size
|
||||
// must also be updated in these two methods, since they do not go
|
||||
// through the corresponding methods of the subList.
|
||||
|
||||
}; |
||||
} |
||||
|
||||
public Object set(int index, Object o) { |
||||
checkMod(); |
||||
checkBoundsExclusive(index); |
||||
o = AbstractList.this.set(index + offset, o); |
||||
upMod(); |
||||
return o; |
||||
} |
||||
|
||||
public Object get(int index) { |
||||
checkMod(); |
||||
checkBoundsExclusive(index); |
||||
return AbstractList.this.get(index + offset); |
||||
} |
||||
|
||||
public void add(int index, Object o) { |
||||
checkMod(); |
||||
checkBoundsInclusive(index); |
||||
AbstractList.this.add(index + offset, o); |
||||
upMod(); |
||||
size++; |
||||
} |
||||
|
||||
public Object remove(int index) { |
||||
checkMod(); |
||||
checkBoundsExclusive(index); |
||||
Object o = AbstractList.this.remove(index + offset); |
||||
upMod(); |
||||
size--; |
||||
return o; |
||||
} |
||||
|
||||
public void removeRange(int fromIndex2, int toIndex2) { |
||||
checkMod(); |
||||
checkBoundsExclusive(fromIndex2); |
||||
checkBoundsInclusive(toIndex2); |
||||
|
||||
// this call will catch the toIndex2 < fromIndex2 condition
|
||||
AbstractList.this.removeRange(offset + fromIndex2, offset + toIndex2); |
||||
upMod(); |
||||
size -= toIndex2 - fromIndex2; |
||||
} |
||||
|
||||
public boolean addAll(int index, Collection c) { |
||||
checkMod(); |
||||
checkBoundsInclusive(index); |
||||
int s = AbstractList.this.size(); |
||||
boolean result = AbstractList.this.addAll(offset + index, c); |
||||
upMod(); |
||||
size += AbstractList.this.size() - s; |
||||
return result; |
||||
} |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,280 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// AbstractMap.java -- Abstract implementation of most of Map
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com),
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// comments
|
||||
// test suite
|
||||
|
||||
package jode.util; |
||||
|
||||
public abstract class AbstractMap implements Map { |
||||
|
||||
public void clear() |
||||
{ |
||||
entrySet().clear(); |
||||
} |
||||
|
||||
public boolean containsKey( Object key ) |
||||
{ |
||||
Object k; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
{ |
||||
k = ((Map.Entry)entries.next()).getKey(); |
||||
if( key == null ? k == null : key.equals( k ) ) |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public boolean containsValue( Object value ) |
||||
{ |
||||
Object v; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
{ |
||||
v = ((Map.Entry)entries.next()).getValue(); |
||||
if( value == null ? v == null : value.equals( v ) ) |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public abstract Set entrySet(); |
||||
|
||||
public boolean equals( Object o ) |
||||
{ |
||||
if( this == o ) |
||||
return true; |
||||
|
||||
if( o == null || !( o instanceof Map ) ) |
||||
return false; |
||||
|
||||
Map m = (Map)o; |
||||
if( m.size() != size() ) |
||||
return false; |
||||
|
||||
Object key, value1, value2; |
||||
Map.Entry entry; |
||||
Iterator entries = entrySet().iterator(); |
||||
while( entries.hasNext() ) |
||||
{ |
||||
entry = (Map.Entry)entries.next(); |
||||
key = entry.getKey(); |
||||
value1 = entry.getValue(); |
||||
value2 = m.get( key ); |
||||
|
||||
if( !( ( value1 == null && value2 == null ) |
||||
|| value1.equals( value2 ) ) ) |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
public Object get( Object key ) |
||||
{ |
||||
Object k; |
||||
Map.Entry entry; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
{ |
||||
entry = (Map.Entry)entries.next(); |
||||
k = entry.getKey(); |
||||
if( key == null ? k == null : key.equals( k ) ) |
||||
return entry.getValue(); |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
public int hashCode() |
||||
{ |
||||
int hashcode = 0; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
hashcode += entries.next().hashCode(); |
||||
|
||||
return hashcode; |
||||
} |
||||
|
||||
public boolean isEmpty() |
||||
{ |
||||
return size() == 0; |
||||
} |
||||
|
||||
public Set keySet() |
||||
{ |
||||
if( this.keySet == null ) |
||||
{ |
||||
this.keySet = |
||||
new AbstractSet() |
||||
{ |
||||
public int size() |
||||
{ |
||||
return AbstractMap.this.size(); |
||||
} |
||||
|
||||
public boolean contains(Object key) |
||||
{ |
||||
return AbstractMap.this.containsKey(key); |
||||
} |
||||
|
||||
public Iterator iterator() |
||||
{ |
||||
return new Iterator() |
||||
{ |
||||
Iterator map_iterator = AbstractMap.this.entrySet().iterator(); |
||||
|
||||
public boolean hasNext() |
||||
{ |
||||
return map_iterator.hasNext(); |
||||
} |
||||
|
||||
public Object next() |
||||
{ |
||||
return ((Map.Entry)map_iterator.next()).getKey(); |
||||
} |
||||
|
||||
public void remove() |
||||
{ |
||||
map_iterator.remove(); |
||||
} |
||||
}; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
return this.keySet; |
||||
} |
||||
|
||||
public Object put( Object key, Object value ) |
||||
{ |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public void putAll( Map m ) |
||||
{ |
||||
Map.Entry entry; |
||||
Iterator entries = m.entrySet().iterator(); |
||||
while( entries.hasNext() ) |
||||
{ |
||||
entry = (Map.Entry)entries.next(); |
||||
put( entry.getKey(), entry.getValue() ); |
||||
} |
||||
} |
||||
|
||||
public Object remove( Object key ) |
||||
{ |
||||
Object k, value; |
||||
Map.Entry entry; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
{ |
||||
entry = (Map.Entry)entries.next(); |
||||
k = entry.getKey(); |
||||
if( key == null ? k == null : key.equals( k ) ) |
||||
{ |
||||
value = entry.getValue(); |
||||
entries.remove(); |
||||
return value; |
||||
} |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
public int size() |
||||
{ |
||||
return entrySet().size(); |
||||
} |
||||
|
||||
public String toString() |
||||
{ |
||||
Map.Entry entry; |
||||
String rep = "AbstractMap< "; |
||||
Iterator entries = entrySet().iterator(); |
||||
|
||||
while( entries.hasNext() ) |
||||
{ |
||||
entry = (Map.Entry)entries.next(); |
||||
rep += entry.getKey() + " -> " + entry.getValue() + ", "; |
||||
} |
||||
|
||||
return rep.substring( 0, rep.length() - 2 ) + " >"; |
||||
} |
||||
|
||||
public Collection values() |
||||
{ |
||||
if( this.valueCollection == null ) |
||||
{ |
||||
this.valueCollection = |
||||
new AbstractCollection() |
||||
{ |
||||
public int size() |
||||
{ |
||||
return AbstractMap.this.size(); |
||||
} |
||||
|
||||
public Iterator iterator() |
||||
{ |
||||
return new Iterator() |
||||
{ |
||||
Iterator map_iterator = AbstractMap.this.entrySet().iterator(); |
||||
|
||||
public boolean hasNext() |
||||
{ |
||||
return map_iterator.hasNext(); |
||||
} |
||||
|
||||
public Object next() |
||||
{ |
||||
return ((Map.Entry)map_iterator.next()).getValue(); |
||||
} |
||||
|
||||
public void remove() |
||||
{ |
||||
map_iterator.remove(); |
||||
} |
||||
}; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
return this.valueCollection; |
||||
} |
||||
|
||||
|
||||
private Collection valueCollection = null; |
||||
private Set keySet = null; |
||||
} |
@ -0,0 +1,111 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// AbstractSequentialList.java -- List implementation for sequential access
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Lots of doc comments still missing.
|
||||
// ~ The class comment should include a description of what should be overridden
|
||||
// to provide what features, as should the listIterator comment.
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* Abstract superclass to make it easier to implement the List interface when |
||||
* backed by a sequential-access store, such as a linked list. |
||||
*/ |
||||
public abstract class AbstractSequentialList extends AbstractList { |
||||
|
||||
/** |
||||
* Returns a ListIterator over the list, starting from position index. |
||||
* Subclasses must provide an implementation of this method. |
||||
* |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
*/ |
||||
public abstract ListIterator listIterator(int index); |
||||
|
||||
/** |
||||
* Add an element to the list at a given index. This implementation obtains a |
||||
* ListIterator positioned at the specified index, and then adds the element |
||||
* using the ListIterator's add method. |
||||
* |
||||
* @param index the position to add the element |
||||
* @param o the element to insert |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
* @exception UnsupportedOperationException if the iterator returned by |
||||
* listIterator(index) does not support the add method. |
||||
*/ |
||||
public void add(int index, Object o) { |
||||
ListIterator i = listIterator(index); |
||||
i.add(o); |
||||
} |
||||
|
||||
public boolean addAll(int index, Collection c) { |
||||
boolean changed = false; |
||||
Iterator ci = c.iterator(); |
||||
ListIterator i = listIterator(index); |
||||
while (ci.hasNext()) { |
||||
i.add(ci.next()); |
||||
changed = true; |
||||
} |
||||
return changed; |
||||
} |
||||
|
||||
public Object get(int index) { |
||||
ListIterator i = listIterator(index); |
||||
if (!i.hasNext()) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
return i.next(); |
||||
} |
||||
|
||||
/** |
||||
* Return an Iterator over this List. This implementation returns |
||||
* listIterator(). |
||||
* |
||||
* @return an Iterator over this List |
||||
*/ |
||||
public Iterator iterator() { |
||||
return listIterator(); |
||||
} |
||||
|
||||
public Object remove(int index) { |
||||
ListIterator i = listIterator(index); |
||||
if (!i.hasNext()) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
Object removed = i.next(); |
||||
i.remove(); |
||||
return removed; |
||||
} |
||||
|
||||
public Object set(int index, Object o) { |
||||
ListIterator i = listIterator(index); |
||||
if (!i.hasNext()) { |
||||
throw new IndexOutOfBoundsException(); |
||||
} |
||||
Object old = i.next(); |
||||
i.set(o); |
||||
return old; |
||||
} |
||||
} |
@ -0,0 +1,78 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// AbstractSet.java -- Abstract implementation of most of Set
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* An abstract implementation of Set to make it easier to create your own |
||||
* implementations. In order to create a Set, subclass AbstractSet and |
||||
* implement the same methods that are required for AbstractCollection |
||||
* (although these methods must of course meet the requirements that Set puts |
||||
* on them - specifically, no element may be in the set more than once). This |
||||
* class simply provides implementations of equals() and hashCode() to fulfil |
||||
* the requirements placed on them by the Set interface. |
||||
*/ |
||||
public abstract class AbstractSet extends AbstractCollection implements Set { |
||||
|
||||
/** |
||||
* Tests whether the given object is equal to this Set. This implementation |
||||
* first checks whether this set <em>is</em> the given object, and returns |
||||
* true if so. Otherwise, if o is a Set and is the same size as this one, it |
||||
* returns the result of calling containsAll on the given Set. Otherwise, it |
||||
* returns false. |
||||
* |
||||
* @param o the Object to be tested for equality with this Set |
||||
* @return true if the given object is equal to this Set |
||||
*/ |
||||
public boolean equals(Object o) { |
||||
if (o == this) { |
||||
return true; |
||||
} else if (o instanceof Set && ((Set)o).size() == size()) { |
||||
return containsAll((Collection)o); |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Returns a hash code for this Set. The hash code of a Set is the sum of the |
||||
* hash codes of all its elements, except that the hash code of null is |
||||
* defined to be zero. This implementation obtains an Iterator over the Set, |
||||
* and sums the results. |
||||
* |
||||
* @return a hash code for this Set |
||||
*/ |
||||
public int hashCode() { |
||||
int hash = 0; |
||||
Iterator i = iterator(); |
||||
while (i.hasNext()) { |
||||
try { |
||||
hash += i.next().hashCode(); |
||||
} catch (NullPointerException e) { |
||||
} |
||||
} |
||||
return hash; |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,234 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Collection.java -- Interface that represents a collection of objects
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Maybe some more @see clauses would be helpful.
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* Interface that represents a collection of objects. This interface is the |
||||
* root of the collection hierarchy, and does not provide any guarantees about |
||||
* the order of its elements or whether or not duplicate elements are |
||||
* permitted. |
||||
* <p> |
||||
* All methods of this interface that are defined to modify the collection are |
||||
* defined as <dfn>optional</dfn>. An optional operation may throw an |
||||
* UnsupportedOperationException if the data backing this collection does not |
||||
* support such a modification. This may mean that the data structure is |
||||
* immutable, or that it is read-only but may change ("unmodifiable"), or |
||||
* that it is modifiable but of fixed size (such as an array), or any number |
||||
* of other combinations. |
||||
* <p> |
||||
* A class that wishes to implement this interface should consider subclassing |
||||
* AbstractCollection, which provides basic implementations of most of the |
||||
* methods of this interface. Classes that are prepared to make guarantees |
||||
* about ordering or about absence of duplicate elements should consider |
||||
* implementing List or Set respectively, both of which are subinterfaces of |
||||
* Collection. |
||||
* <p> |
||||
* A general-purpose implementation of the Collection interface should in most |
||||
* cases provide at least two constructors: One which takes no arguments and |
||||
* creates an empty collection, and one which takes a Collection as an argument |
||||
* and returns a collection containing the same elements (that is, creates a |
||||
* copy of the argument using its own implementation). |
||||
* |
||||
* @see java.util.List |
||||
* @see java.util.Set |
||||
* @see java.util.AbstractCollection |
||||
*/ |
||||
public interface Collection { |
||||
|
||||
/** |
||||
* Add an element to this collection. |
||||
* |
||||
* @param o the object to add. |
||||
* @returns true if the collection was modified as a result of this action. |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the add operation. |
||||
* @exception ClassCastException if o cannot be added to this collection due |
||||
* to its type. |
||||
* @exception IllegalArgumentException if o cannot be added to this |
||||
* collection for some other reason. |
||||
*/ |
||||
boolean add(Object o); |
||||
|
||||
/** |
||||
* Add the contents of a given collection to this collection. |
||||
* |
||||
* @param c the collection to add. |
||||
* @returns true if the collection was modified as a result of this action. |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the addAll operation. |
||||
* @exception ClassCastException if some element of c cannot be added to this |
||||
* collection due to its type. |
||||
* @exception IllegalArgumentException if some element of c cannot be added |
||||
* to this collection for some other reason. |
||||
*/ |
||||
boolean addAll(Collection c); |
||||
|
||||
/** |
||||
* Clear the collection, such that a subsequent call to isEmpty() would |
||||
* return true. |
||||
* |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the clear operation. |
||||
*/ |
||||
void clear(); |
||||
|
||||
/** |
||||
* Test whether this collection contains a given object as one of its |
||||
* elements. |
||||
* |
||||
* @param o the element to look for. |
||||
* @returns true if this collection contains at least one element e such that |
||||
* <code>o == null ? e == null : o.equals(e)</code>. |
||||
*/ |
||||
boolean contains(Object o); |
||||
|
||||
/** |
||||
* Test whether this collection contains every element in a given collection. |
||||
* |
||||
* @param c the collection to test for. |
||||
* @returns true if for every element o in c, contains(o) would return true. |
||||
*/ |
||||
boolean containsAll(Collection c); |
||||
|
||||
/** |
||||
* Test whether this collection is equal to some object. The Collection |
||||
* interface does not explicitly require any behaviour from this method, and |
||||
* it may be left to the default implementation provided by Object. The Set |
||||
* and List interfaces do, however, require specific behaviour from this |
||||
* method. |
||||
* <p> |
||||
* If an implementation of Collection, which is not also an implementation of |
||||
* Set or List, should choose to implement this method, it should take care |
||||
* to obey the contract of the equals method of Object. In particular, care |
||||
* should be taken to return false when o is a Set or a List, in order to |
||||
* preserve the symmetry of the relation. |
||||
* |
||||
* @param o the object to compare to this collection. |
||||
* @returns true if the o is equal to this collection. |
||||
*/ |
||||
boolean equals(Object o); |
||||
|
||||
/** |
||||
* Obtain a hash code for this collection. The Collection interface does not |
||||
* explicitly require any behaviour from this method, and it may be left to |
||||
* the default implementation provided by Object. The Set and List interfaces |
||||
* do, however, require specific behaviour from this method. |
||||
* <p> |
||||
* If an implementation of Collection, which is not also an implementation of |
||||
* Set or List, should choose to implement this method, it should take care |
||||
* to obey the contract of the hashCode method of Object. Note that this |
||||
* method renders it impossible to correctly implement both Set and List, as |
||||
* the required implementations are mutually exclusive. |
||||
* |
||||
* @returns a hash code for this collection. |
||||
*/ |
||||
int hashCode(); |
||||
|
||||
/** |
||||
* Test whether this collection is empty, that is, if size() == 0. |
||||
* |
||||
* @returns true if this collection contains no elements. |
||||
*/ |
||||
boolean isEmpty(); |
||||
|
||||
/** |
||||
* Obtain an Iterator over this collection. |
||||
* |
||||
* @returns an Iterator over the elements of this collection, in any order. |
||||
*/ |
||||
Iterator iterator(); |
||||
|
||||
/** |
||||
* Remove a single occurrence of an object from this collection. That is, |
||||
* remove an element e, if one exists, such that <code>o == null ? e == null |
||||
* : o.equals(e)</code>. |
||||
* |
||||
* @param o the object to remove. |
||||
* @returns true if the collection changed as a result of this call, that is, |
||||
* if the collection contained at least one occurrence of o. |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the remove operation. |
||||
*/ |
||||
boolean remove(Object o); |
||||
|
||||
/** |
||||
* Remove all elements of a given collection from this collection. That is, |
||||
* remove every element e such that c.contains(e). |
||||
* |
||||
* @returns true if this collection was modified as a result of this call. |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the removeAll operation. |
||||
*/ |
||||
boolean removeAll(Collection c); |
||||
|
||||
/** |
||||
* Remove all elements of this collection that are not contained in a given |
||||
* collection. That is, remove every element e such that !c.contains(e). |
||||
* |
||||
* @returns true if this collection was modified as a result of this call. |
||||
* @exception UnsupportedOperationException if this collection does not |
||||
* support the retainAll operation. |
||||
*/ |
||||
boolean retainAll(Collection c); |
||||
|
||||
/** |
||||
* Get the number of elements in this collection. |
||||
* |
||||
* @returns the number of elements in the collection. |
||||
*/ |
||||
int size(); |
||||
|
||||
/** |
||||
* Copy the current contents of this collection into an array. |
||||
* |
||||
* @returns an array of type Object[] and length equal to the size of this |
||||
* collection, containing the elements currently in this collection, in |
||||
* any order. |
||||
*/ |
||||
Object[] toArray(); |
||||
|
||||
/** |
||||
* Copy the current contents of this collection into an array. If the array |
||||
* passed as an argument has length less than the size of this collection, an |
||||
* array of the same run-time type as a, and length equal to the size of this |
||||
* collection, is allocated using Reflection. Otherwise, a itself is used. |
||||
* The elements of this collection are copied into it, and if there is space |
||||
* in the array, the following element is set to null. The resultant array is |
||||
* returned. |
||||
* Note: The fact that the following element is set to null is only useful |
||||
* if it is known that this collection does not contain any null elements. |
||||
* |
||||
* @param a the array to copy this collection into. |
||||
* @returns an array containing the elements currently in this collection, in |
||||
* any order. |
||||
* @exception ArrayStoreException if the type of any element of the |
||||
* collection is not a subtype of the element type of a. |
||||
*/ |
||||
Object[] toArray(Object[] a); |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,51 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/************************************************************************* |
||||
/* Comparable.java -- Interface for comparaing objects to obtain an ordering |
||||
/* |
||||
/* Copyright (c) 1998 by Free Software Foundation, Inc. |
||||
/* |
||||
/* This program is free software; you can redistribute it and/or modify |
||||
/* it under the terms of the GNU Library General Public License as published |
||||
/* by the Free Software Foundation, version 2. (see COPYING.LIB) |
||||
/* |
||||
/* This program 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 this program; if not, write to the Free Software Foundation |
||||
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA |
||||
/*************************************************************************/ |
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
** Interface for objects that can be ordering among other |
||||
** objects. The ordering can be <EM>total</EM>, such that two objects |
||||
** only compare equal if they are equal by the equals method, or |
||||
** <EM>partial</EM> such that this is not necessarily true. For |
||||
** example, a case-sensitive dictionary order comparison of Strings |
||||
** is total, but if it is case-insensitive it is partial, because |
||||
** "abc" and "ABC" compare as equal even though "abc".equals("ABC") |
||||
** returns false. |
||||
** |
||||
** @author Geoff Berry |
||||
** |
||||
** @since JDK1.2 |
||||
** @see java.util.Comparator |
||||
**/ |
||||
public interface Comparable |
||||
{ |
||||
/** |
||||
** @return a negative integer if this object is less than |
||||
** <code>o<code>, zero if this object is equal to <code>o</code>, or |
||||
** a positive integer if this object is greater than <code>o</code> |
||||
**/ |
||||
public int compareTo( Object o ); |
||||
} |
@ -0,0 +1,62 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Comparator.java -- Interface for objects that specify an ordering
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* Interface for objects that specify an ordering between objects. The ordering |
||||
* can be <EM>total</EM>, such that two objects only compare equal if they are |
||||
* equal by the equals method, or <EM>partial</EM> such that this is not |
||||
* necessarily true. For example, a case-sensitive dictionary order comparison |
||||
* of Strings is total, but if it is case-insensitive it is partial, because |
||||
* "abc" and "ABC" compare as equal even though "abc".equals("ABC") returns |
||||
* false. |
||||
* <P> |
||||
* In general, Comparators should be Serializable, because when they are passed |
||||
* to Serializable data structures such as SortedMap or SortedSet, the entire |
||||
* data structure will only serialize correctly if the comparator is |
||||
* Serializable. |
||||
*/ |
||||
public interface Comparator { |
||||
|
||||
/** |
||||
* Return an integer that is negative, zero or positive depending on whether |
||||
* the first argument is less than, equal to or greater than the second |
||||
* according to this ordering. This method should obey the following contract: |
||||
* <UL> |
||||
* <LI>if compare(a, b) < 0 then compare(b, a) > 0</LI> |
||||
* <LI>if compare(a, b) throws an exception, so does compare(b, a)</LI> |
||||
* <LI>if compare(a, b) < 0 and compare(b, c) < 0 then compare(a, c) |
||||
* < 0</LI> |
||||
* <LI>if a.equals(b) or both a and b are null, then compare(a, b) == 0. |
||||
* The converse need not be true, but if it is, this Comparator |
||||
* specifies a <EM>total</EM> ordering.</LI> |
||||
* </UL> |
||||
* |
||||
* @throws ClassCastException if the elements are not of types that can be |
||||
* compared by this ordering. |
||||
*/ |
||||
int compare(Object o1, Object o2); |
||||
} |
@ -0,0 +1,53 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// ConcurrentModificationException.java -- Data structure concurrently modified
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* Exception that is thrown by the collections classes when it is detected that |
||||
* a modification has been made to a data structure when this is not allowed, |
||||
* such as when a collection is structurally modified while an Iterator is |
||||
* operating over it. In cases where this can be detected, a |
||||
* ConcurrentModificationException will be thrown. An Iterator that detects this |
||||
* condition is referred to as fail-fast. |
||||
*/ |
||||
public class ConcurrentModificationException extends RuntimeException { |
||||
|
||||
/** |
||||
* Constructs a ConcurrentModificationException with no detail message. |
||||
*/ |
||||
public ConcurrentModificationException() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* Constructs a ConcurrentModificationException with a detail message. |
||||
* |
||||
* @param detail the detail message for the exception |
||||
*/ |
||||
public ConcurrentModificationException(String detail) { |
||||
super(detail); |
||||
} |
||||
} |
@ -0,0 +1,66 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Iterator.java -- Interface for iterating over collections
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* An object which iterates over a collection. An Iterator is used to return the |
||||
* items once only, in sequence, by successive calls to the next method. It is |
||||
* also possible to remove elements from the underlying collection by using the |
||||
* optional remove method. Iterator is intended as a replacement for the |
||||
* Enumeration interface of previous versions of Java, which did not have the |
||||
* remove method and had less conveniently named methods. |
||||
*/ |
||||
public interface Iterator { |
||||
|
||||
/** |
||||
* Tests whether there are elements remaining in the collection. |
||||
* |
||||
* @return true if there is at least one more element in the collection, |
||||
* that is, if the next call to next will not throw NoSuchElementException. |
||||
*/ |
||||
boolean hasNext(); |
||||
|
||||
/** |
||||
* Obtain the next element in the collection. |
||||
* |
||||
* @return the next element in the collection |
||||
* @exception NoSuchElementException if there are no more elements |
||||
*/ |
||||
Object next(); |
||||
|
||||
/** |
||||
* Remove from the underlying collection the last element returned by next. |
||||
* This method can be called only once after each call to next. It does not |
||||
* affect what will be returned by subsequent calls to next. This operation is |
||||
* optional, it may throw an UnsupportedOperationException. |
||||
* |
||||
* @exception IllegalStateException if next has not yet been called or remove |
||||
* has already been called since the last call to next. |
||||
* @exception UnsupportedOperationException if this Iterator does not support |
||||
* the remove operation. |
||||
*/ |
||||
void remove(); |
||||
} |
@ -0,0 +1,331 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// List.java -- An ordered collection which allows indexed access
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comment for the interface itself needs to be put into english.
|
||||
// ~ Some more @see clauses might be nice.
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* [This is what this doc comment will mention: |
||||
* ~ Additional restrictions on some methods. Others included for completeness. |
||||
* ~ ListIterator and what it can do |
||||
* ~ Positional and iterated access |
||||
* ~ search (but linear time) |
||||
* ~ be careful when containing self as an element, because equals and hashCode |
||||
* loop.] |
||||
*/ |
||||
public interface List extends Collection { |
||||
|
||||
/** |
||||
* Insert an element into the list at a given position. |
||||
* |
||||
* @param index the location to insert the item. |
||||
* @param o the object to insert. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* add operation. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
* @exception ClassCastException if o cannot be added to this list due to its |
||||
* type. |
||||
* @exception IllegalArgumentException if o cannot be added to this list for |
||||
* some other reason. |
||||
*/ |
||||
void add(int index, Object o); |
||||
|
||||
/** |
||||
* Add an element to the end of the list. |
||||
* |
||||
* @param o the object to add. |
||||
* @returns true, as Collection defines this method as returning true if the |
||||
* list was modified as a result of this action, and it always is for a |
||||
* list. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* add operation. |
||||
* @exception ClassCastException if o cannot be added to this list due to its |
||||
* type. |
||||
* @exception IllegalArgumentException if o cannot be added to this list for |
||||
* some other reason. |
||||
*/ |
||||
boolean add(Object o); |
||||
|
||||
/** |
||||
* Insert the contents of a collection into the list at a given position. |
||||
* |
||||
* @param index the location to insert the collection. |
||||
* @param c the collection to insert. |
||||
* @returns true if the list was modified by this action, that is, if c is |
||||
* non-empty. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* addAll operation. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
* @exception ClassCastException if some element of c cannot be added to this |
||||
* list due to its type. |
||||
* @exception IllegalArgumentException if some element of c cannot be added |
||||
* to this list for some other reason. |
||||
*/ |
||||
boolean addAll(int index, Collection c); |
||||
|
||||
/** |
||||
* Add the contents of a collection to the end of the list. |
||||
* |
||||
* @param c the collection to add. |
||||
* @returns true if the list was modified by this action, that is, if c is |
||||
* non-empty. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* addAll operation. |
||||
* @exception ClassCastException if some element of c cannot be added to this |
||||
* list due to its type. |
||||
* @exception IllegalArgumentException if some element of c cannot be added |
||||
* to this list for some other reason. |
||||
*/ |
||||
boolean addAll(Collection c); |
||||
|
||||
/** |
||||
* Clear the list, such that a subsequent call to isEmpty() would return |
||||
* true. |
||||
* |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* clear operation. |
||||
*/ |
||||
void clear(); |
||||
|
||||
/** |
||||
* Test whether this list contains a given object as one of its elements. |
||||
* |
||||
* @param o the element to look for. |
||||
* @returns true if this list contains an element e such that <code>o == |
||||
* null ? e == null : o.equals(e)</code>. |
||||
*/ |
||||
boolean contains(Object o); |
||||
|
||||
/** |
||||
* Test whether this list contains every element in a given collection. |
||||
* |
||||
* @param c the collection to test for. |
||||
* @returns true if for every element o in c, contains(o) would return true. |
||||
*/ |
||||
boolean containsAll(Collection c); |
||||
|
||||
/** |
||||
* Test whether this list is equal to another object. A List is defined to be |
||||
* equal to an object if and only if that object is also a List, and the two |
||||
* lists are equal. Two lists l1 and l2 are defined to be equal if and only |
||||
* if <code>l1.size() == l2.size()</code>, and for every integer n between 0 |
||||
* and <code>l1.size() - 1</code> inclusive, <code>l1.get(n) == null ? |
||||
* l2.get(n) == null : l1.get(n).equals(l2.get(n))</code>. |
||||
* |
||||
* @param o the object to test for equality with this list. |
||||
* @returns true if o is equal to this list. |
||||
*/ |
||||
boolean equals(Object o); |
||||
|
||||
/** |
||||
* Get the element at a given index in this list. |
||||
* |
||||
* @param index the index of the element to be returned. |
||||
* @returns the element at index index in this list. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index >= size() |
||||
*/ |
||||
Object get(int index); |
||||
|
||||
/** |
||||
* Obtain a hash code for this list. In order to obey the general contract of |
||||
* the hashCode method of class Object, this value is calculated as follows: |
||||
* <pre> |
||||
* hashCode = 1; |
||||
* Iterator i = list.iterator(); |
||||
* while (i.hasNext()) { |
||||
* Object obj = i.next(); |
||||
* hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); |
||||
* } |
||||
* </pre> |
||||
* This ensures that the general contract of Object.hashCode() is adhered to. |
||||
* |
||||
* @returns the hash code of this list. |
||||
*/ |
||||
int hashCode(); |
||||
|
||||
/** |
||||
* Obtain the first index at which a given object is to be found in this |
||||
* list. |
||||
* |
||||
* @returns the least integer n such that <code>o == null ? get(n) == null : |
||||
* o.equals(get(n))</code>, or -1 if there is no such index. |
||||
*/ |
||||
int indexOf(Object o); |
||||
|
||||
/** |
||||
* Test whether this list is empty, that is, if size() == 0. |
||||
* |
||||
* @returns true if this list contains no elements. |
||||
*/ |
||||
boolean isEmpty(); |
||||
|
||||
/** |
||||
* Obtain an Iterator over this list. |
||||
* |
||||
* @returns an Iterator over the elements of this list, in order. |
||||
*/ |
||||
Iterator iterator(); |
||||
|
||||
/** |
||||
* Obtain the last index at which a given object is to be found in this |
||||
* list. |
||||
* |
||||
* @returns the greatest integer n such that <code>o == null ? get(n) == null |
||||
* : o.equals(get(n))</code>. |
||||
*/ |
||||
int lastIndexOf(Object o); |
||||
|
||||
/** |
||||
* Obtain a ListIterator over this list, starting at the beginning. |
||||
* |
||||
* @returns a ListIterator over the elements of this list, in order, starting |
||||
* at the beginning. |
||||
*/ |
||||
ListIterator listIterator(); |
||||
|
||||
/** |
||||
* Obtain a ListIterator over this list, starting at a given position. |
||||
* |
||||
* @param index the position, between 0 and size() inclusive, to begin the |
||||
* iteration from. |
||||
* @returns a ListIterator over the elements of this list, in order, starting |
||||
* at index. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
*/ |
||||
ListIterator listIterator(int index); |
||||
|
||||
/** |
||||
* Remove the element at a given position in this list. |
||||
* |
||||
* @param index the position within the list of the object to remove. |
||||
* @returns the object that was removed. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* remove operation. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index > size() |
||||
*/ |
||||
Object remove(int index); |
||||
|
||||
/** |
||||
* Remove the first occurence of an object from this list. That is, remove |
||||
* the first element e such that <code>o == null ? e == null : |
||||
* o.equals(e)</code>. |
||||
* |
||||
* @param o the object to remove. |
||||
* @returns true if the list changed as a result of this call, that is, if |
||||
* the list contained at least one occurrence of o. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* remove operation. |
||||
*/ |
||||
boolean remove(Object o); |
||||
|
||||
/** |
||||
* Remove all elements of a given collection from this list. That is, remove |
||||
* every element e such that c.contains(e). |
||||
* |
||||
* @returns true if this list was modified as a result of this call. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* removeAll operation. |
||||
*/ |
||||
boolean removeAll(Collection c); |
||||
|
||||
/** |
||||
* Remove all elements of this list that are not contained in a given |
||||
* collection. That is, remove every element e such that !c.contains(e). |
||||
* |
||||
* @returns true if this list was modified as a result of this call. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* retainAll operation. |
||||
*/ |
||||
boolean retainAll(Collection c); |
||||
|
||||
/** |
||||
* Replace an element of this list with another object. |
||||
* |
||||
* @param index the position within this list of the element to be replaced. |
||||
* @param o the object to replace it with. |
||||
* @returns the object that was replaced. |
||||
* @exception UnsupportedOperationException if this list does not support the |
||||
* set operation. |
||||
* @exception IndexOutOfBoundsException if index < 0 || index >= size() |
||||
* @exception ClassCastException if o cannot be added to this list due to its |
||||
* type. |
||||
* @exception IllegalArgumentException if o cannot be added to this list for |
||||
* some other reason. |
||||
*/ |
||||
Object set(int index, Object o); |
||||
|
||||
/** |
||||
* Get the number of elements in this list. |
||||
* |
||||
* @returns the number of elements in the list. |
||||
*/ |
||||
int size(); |
||||
|
||||
/** |
||||
* Obtain a List view of a subsection of this list, from fromIndex |
||||
* (inclusive) to toIndex (exclusive). The returned list should be modifiable |
||||
* if and only if this list is modifiable. Changes to the returned list |
||||
* should be reflected in this list. If this list is structurally modified in |
||||
* any way other than through the returned list, the result of any subsequent |
||||
* operations on the returned list is undefined. |
||||
* |
||||
* @param fromIndex the index that the returned list should start from |
||||
* (inclusive). |
||||
* @param toIndex the index that the returned list should go to (exclusive). |
||||
* @returns a List backed by a subsection of this list. |
||||
* @exception IndexOutOfBoundsException if fromIndex < 0 || toIndex > size() |
||||
* || fromIndex > toIndex. |
||||
*/ |
||||
List subList(int fromIndex, int toIndex); |
||||
|
||||
/** |
||||
* Copy the current contents of this list into an array. |
||||
* |
||||
* @returns an array of type Object[] and length equal to the length of this |
||||
* list, containing the elements currently in this list, in order. |
||||
*/ |
||||
Object[] toArray(); |
||||
|
||||
/** |
||||
* Copy the current contents of this list into an array. If the array passed |
||||
* as an argument has length less than that of this list, an array of the |
||||
* same run-time type as a, and length equal to the length of this list, is |
||||
* allocated using Reflection. Otherwise, a itself is used. The elements of |
||||
* this list are copied into it, and if there is space in the array, the |
||||
* following element is set to null. The resultant array is returned. |
||||
* Note: The fact that the following element is set to null is only useful |
||||
* if it is known that this list does not contain any null elements. |
||||
* |
||||
* @param a the array to copy this list into. |
||||
* @returns an array containing the elements currently in this list, in |
||||
* order. |
||||
* @exception ArrayStoreException if the type of any element of the |
||||
* collection is not a subtype of the element type of a. |
||||
*/ |
||||
Object[] toArray(Object[] a); |
||||
} |
@ -0,0 +1,145 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// ListIterator.java -- Extended Iterator for iterating over ordered lists
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* An extended version of Iterator to support the extra features of Lists. The |
||||
* elements may be accessed in forward or reverse order, elements may be |
||||
* replaced as well as removed, and new elements may be inserted, during the |
||||
* traversal of the list. |
||||
*/ |
||||
public interface ListIterator extends Iterator { |
||||
|
||||
/** |
||||
* Tests whether there are elements remaining in the list in the forward |
||||
* direction. |
||||
* |
||||
* @return true if there is at least one more element in the list in the |
||||
* forward direction, that is, if the next call to next will not throw |
||||
* NoSuchElementException. |
||||
*/ |
||||
boolean hasNext(); |
||||
|
||||
/** |
||||
* Tests whether there are elements remaining in the list in the reverse |
||||
* direction. |
||||
* |
||||
* @return true if there is at least one more element in the list in the |
||||
* reverse direction, that is, if the next call to previous will not throw |
||||
* NoSuchElementException. |
||||
*/ |
||||
boolean hasPrevious(); |
||||
|
||||
/** |
||||
* Obtain the next element in the list in the forward direction. Repeated |
||||
* calls to next may be used to iterate over the entire list, or calls to next |
||||
* and previous may be used together to go forwards and backwards. Alternating |
||||
* calls to next and previous will return the same element. |
||||
* |
||||
* @return the next element in the list in the forward direction |
||||
* @exception NoSuchElementException if there are no more elements |
||||
*/ |
||||
Object next(); |
||||
|
||||
/** |
||||
* Obtain the next element in the list in the reverse direction. Repeated |
||||
* calls to previous may be used to iterate backwards over the entire list, or |
||||
* calls to next and previous may be used together to go forwards and |
||||
* backwards. Alternating calls to next and previous will return the same |
||||
* element. |
||||
* |
||||
* @return the next element in the list in the reverse direction |
||||
* @exception NoSuchElementException if there are no more elements |
||||
*/ |
||||
Object previous(); |
||||
|
||||
/** |
||||
* Find the index of the element that would be returned by a call to next. |
||||
* |
||||
* @return the index of the element that would be returned by a call to next, |
||||
* or list.size() if the iterator is at the end of the list. |
||||
*/ |
||||
int nextIndex(); |
||||
|
||||
/** |
||||
* Find the index of the element that would be returned by a call to previous. |
||||
* |
||||
* @return the index of the element that would be returned by a call to |
||||
* previous, or -1 if the iterator is at the beginning of the list. |
||||
*/ |
||||
int previousIndex(); |
||||
|
||||
/** |
||||
* Insert an element into the list at the current position of the iterator. |
||||
* The element is inserted in between the element that would be returned by |
||||
* previous and the element that would be returned by next. After the |
||||
* insertion, a subsequent call to next is unaffected, but a call to |
||||
* previous returns the item that was added. This operation is optional, it |
||||
* may throw an UnsupportedOperationException. |
||||
* |
||||
* @param o the object to insert into the list |
||||
* @exception ClassCastException the object is of a type which cannot be added |
||||
* to this list |
||||
* @exception IllegalArgumentException some other aspect of the object stops |
||||
* it being added to this list |
||||
* @exception UnsupportedOperationException if this ListIterator does not |
||||
* support the add operation |
||||
*/ |
||||
void add(Object o); |
||||
|
||||
/** |
||||
* Remove from the list the element last returned by a call to next or |
||||
* previous. This method may only be called if neither add nor remove have |
||||
* been called since the last call to next or previous. This operation is |
||||
* optional, it may throw an UnsupportedOperationException. |
||||
* |
||||
* @exception IllegalStateException if neither next or previous have been |
||||
* called, or if add or remove has been called since the last call to next |
||||
* or previous. |
||||
* @exception UnsupportedOperationException if this ListIterator does not |
||||
* support the remove operation. |
||||
*/ |
||||
void remove(); |
||||
|
||||
/** |
||||
* Replace the element last returned by a call to next or previous with a |
||||
* given object. This method may only be called if neither add nor remove have |
||||
* been called since the last call to next or previous. This operation is |
||||
* optional, it may throw an UnsupportedOperationException. |
||||
* |
||||
* @param o the object to replace the element with |
||||
* @exception ClassCastException the object is of a type which cannot be added |
||||
* to this list |
||||
* @exception IllegalArgumentException some other aspect of the object stops |
||||
* it being added to this list |
||||
* @exception IllegalStateException if neither next or previous have been |
||||
* called, or if add or remove has been called since the last call to next |
||||
* or previous. |
||||
* @exception UnsupportedOperationException if this ListIterator does not |
||||
* support the set operation. |
||||
*/ |
||||
void set(Object o); |
||||
} |
@ -0,0 +1,55 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Map.java -- An object that maps keys to values
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comments for everything.
|
||||
|
||||
package jode.util; |
||||
|
||||
public interface Map |
||||
{ |
||||
public void clear(); |
||||
public boolean containsKey(Object key); |
||||
public boolean containsValue(Object value); |
||||
public Set entrySet(); |
||||
public boolean equals(Object o); |
||||
public Object get(Object key); |
||||
public Object put(Object key, Object value); |
||||
public int hashCode(); |
||||
public boolean isEmpty(); |
||||
public Set keySet(); |
||||
public void putAll(Map m); |
||||
public Object remove(Object o); |
||||
public int size(); |
||||
public Collection values(); |
||||
|
||||
public static interface Entry { |
||||
public Object getKey(); |
||||
public Object getValue(); |
||||
public Object setValue(Object value); |
||||
public int hashCode(); |
||||
public boolean equals(Object o); |
||||
} |
||||
} |
@ -0,0 +1,46 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Set.java -- A collection that prohibits duplicates
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comments for everything.
|
||||
|
||||
package jode.util; |
||||
|
||||
public interface Set extends Collection { |
||||
boolean add(Object o); |
||||
boolean addAll(Collection c); |
||||
void clear(); |
||||
boolean contains(Object o); |
||||
boolean containsAll(Collection c); |
||||
boolean equals(Object o); |
||||
int hashCode(); |
||||
boolean isEmpty(); |
||||
Iterator iterator(); |
||||
boolean remove(Object o); |
||||
boolean removeAll(Collection c); |
||||
boolean retainAll(Collection c); |
||||
int size(); |
||||
Object[] toArray(); |
||||
} |
@ -0,0 +1,100 @@ |
||||
/* SimpleMap Copyright (C) 1999 Jochen Hoenicke. |
||||
* |
||||
* This program 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. |
||||
* |
||||
* This program 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 this program; see the file COPYING. If not, write to |
||||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
||||
* |
||||
* $Id$ |
||||
*/ |
||||
|
||||
package jode.util; |
||||
///#ifdef JDK12
|
||||
///import java.util.AbstractMap;
|
||||
///import java.util.Map;
|
||||
///import java.util.Iterator;
|
||||
///import java.util.Set;
|
||||
///#endif
|
||||
|
||||
/** |
||||
* This is a very simple map, using a set as backing. |
||||
* The default backing set is a simple set, but you can specify any other |
||||
* set of Map.Entry in the constructor. |
||||
*/ |
||||
public class SimpleMap extends AbstractMap { |
||||
private Set backing; |
||||
|
||||
public SimpleMap() { |
||||
backing = new SimpleSet(); |
||||
} |
||||
|
||||
public SimpleMap(int initialCapacity) { |
||||
backing = new SimpleSet(initialCapacity); |
||||
} |
||||
|
||||
public SimpleMap(Set fromSet) { |
||||
backing = fromSet; |
||||
} |
||||
|
||||
public Set entrySet() { |
||||
return backing; |
||||
} |
||||
|
||||
public static class SimpleEntry implements Map.Entry { |
||||
Object key; |
||||
Object value; |
||||
|
||||
public SimpleEntry(Object key, Object value) { |
||||
this.key = key; |
||||
this.value = value; |
||||
} |
||||
|
||||
public Object getKey() { |
||||
return key; |
||||
} |
||||
|
||||
public Object getValue() { |
||||
return value; |
||||
} |
||||
|
||||
public Object setValue(Object newValue) { |
||||
Object old = value; |
||||
value = newValue; |
||||
return old; |
||||
} |
||||
|
||||
public int hashCode() { |
||||
return key.hashCode() ^ value.hashCode(); |
||||
} |
||||
|
||||
public boolean equals(Object o) { |
||||
if (o instanceof Map.Entry) { |
||||
Map.Entry e = (Map.Entry) o; |
||||
return key.equals(e.getKey()) && value.equals(e.getValue()); |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
public Object put(Object key, Object value) { |
||||
for (Iterator i = backing.iterator(); |
||||
i.hasNext(); ) { |
||||
Map.Entry entry = (Map.Entry) i.next(); |
||||
if (key.equals(entry.getKey())) |
||||
return entry.setValue(value); |
||||
} |
||||
backing.add(new SimpleEntry(key, value)); |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,38 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// SortedMap.java -- A map that makes guarantees about the order of its keys
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comments for everything.
|
||||
|
||||
package jode.util; |
||||
|
||||
public interface SortedMap extends Map { |
||||
Comparator comparator(); |
||||
Object firstKey(); |
||||
SortedMap headMap(Object toKey); |
||||
Object lastKey(); |
||||
SortedMap subMap(Object fromKey, Object toKey); |
||||
SortedMap tailMap(Object fromKey); |
||||
} |
@ -0,0 +1,38 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// SortedSet.java -- A set that makes guarantees about the order of its elements
|
||||
//
|
||||
// Copyright (c) 1998 by Stuart Ballard (stuart.ballard@mcmail.com)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Library General Public License as published
|
||||
// by the Free Software Foundation, version 2. (see COPYING.LIB)
|
||||
//
|
||||
// This program 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 Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation
|
||||
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// TO DO:
|
||||
// ~ Doc comments for everything.
|
||||
|
||||
package jode.util; |
||||
|
||||
public interface SortedSet extends Set { |
||||
Comparator comparator(); |
||||
Object first(); |
||||
SortedSet headSet(Object toElement); |
||||
Object last(); |
||||
SortedSet subSet(Object fromElement, Object toElement); |
||||
SortedSet tailSet(Object fromElement); |
||||
} |
@ -0,0 +1,54 @@ |
||||
// This interface is taken from the Classpath project.
|
||||
// Please note the different copyright holder!
|
||||
// The changes I did is this comment, the package line, some
|
||||
// imports from java.util and some minor jdk12 -> jdk11 fixes.
|
||||
// -- Jochen Hoenicke <jochen@gnu.org>
|
||||
|
||||
/************************************************************************* |
||||
/* UnsupportedOperationException.java -- Exception thrown when an |
||||
/* unsupported operation is attempted on an object |
||||
/* |
||||
/* Copyright (c) 1998 by Free Software Foundation, Inc. |
||||
/* |
||||
/* This program is free software; you can redistribute it and/or modify |
||||
/* it under the terms of the GNU Library General Public License as published |
||||
/* by the Free Software Foundation, version 2. (see COPYING.LIB) |
||||
/* |
||||
/* This program 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 this program; if not, write to the Free Software Foundation |
||||
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA |
||||
/*************************************************************************/ |
||||
|
||||
package jode.util; |
||||
|
||||
/** |
||||
* This exception is thrown by an object when an operation is |
||||
* requested of it that it does not support. |
||||
* |
||||
* @since JDK 1.2 |
||||
*/ |
||||
public class UnsupportedOperationException extends RuntimeException |
||||
{ |
||||
static final long serialVersionUID = -1242599979055084673L; |
||||
|
||||
/** |
||||
* Create an exception without a message. |
||||
*/ |
||||
public UnsupportedOperationException() |
||||
{ |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* Create an exception with a message. |
||||
*/ |
||||
public UnsupportedOperationException( String s ) |
||||
{ |
||||
super(s); |
||||
} |
||||
} |
Loading…
Reference in new issue