You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bi...@apache.org on 2009/12/11 07:38:21 UTC
svn commit: r889516 - in
/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear:
AbstractRealVector.java OpenMapRealVector.java
Author: billbarker
Date: Fri Dec 11 06:38:20 2009
New Revision: 889516
URL: http://svn.apache.org/viewvc?rev=889516&view=rev
Log:
Initial fixes to the iterators.
This fixes the default sparseIterator problem where a RealVector only contains zero elements, and add a sparseIterator to the OpenMapRealVector.
Still TODO:
1) add unit tests
2) remove *mapTo and *mapToSelf from OpenMapRealVector
3) fix javadocs
4) remove support for non-zero default values in OpenMapRealVector
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java?rev=889516&r1=889515&r2=889516&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java Fri Dec 11 06:38:20 2009
@@ -769,9 +769,15 @@
if (current.getValue() == 0) {
advance(current);
}
- next = new EntryImpl();
- next.setIndex(current.getIndex());
- advance(next);
+ if(current.getIndex() >= 0){
+ // There is at least one non-zero entry
+ next = new EntryImpl();
+ next.setIndex(current.getIndex());
+ advance(next);
+ } else {
+ // The vector consists of only zero entries, so deny having a next
+ current = null;
+ }
}
/** Advance an entry up to the next non null one.
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java?rev=889516&r1=889515&r2=889516&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java Fri Dec 11 06:38:20 2009
@@ -1250,4 +1250,70 @@
return (double)entries.size()/(double)getDimension();
}
+ /** @{InheritDoc} */
+ public java.util.Iterator<Entry> sparseIterator() {
+ return new OpenMapSparseIterator();
+ }
+
+ /**
+ * Implementation of <code>Entry</code> optimized for OpenMap.
+ * <p>This implementation does not allow arbitrary calls to <code>setIndex</code>
+ * since the order that entries are returned is undefined.
+ */
+ protected class OpenMapEntry extends Entry {
+ private final Iterator iter;
+
+ protected OpenMapEntry(Iterator iter) {
+ this.iter = iter;
+ }
+ /** {@InheritDoc} */
+ @Override
+ public double getValue() {
+ return iter.value();
+ }
+
+ /** {@InheritDoc} */
+ @Override
+ public void setValue(double value) {
+ entries.put(iter.key(), value);
+ }
+
+ /** {@InheritDoc} */
+ @Override
+ public int getIndex() {
+ return iter.key();
+ }
+ }
+
+ /**
+ * Iterator class to do iteration over just the non-zero elements.
+ * <p>This implementation is fail-fast, so cannot be used to modify any zero element.
+ *
+ */
+
+ protected class OpenMapSparseIterator implements java.util.Iterator<Entry> {
+ private final Iterator iter;
+ private final Entry current;
+
+ protected OpenMapSparseIterator() {
+ iter = entries.iterator();
+ current = new OpenMapEntry(iter);
+ }
+
+ /** {@InheritDoc} */
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+
+ /** {@InheritDoc} */
+ public Entry next() {
+ iter.advance();
+ return current;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("Not supported");
+ }
+
+ }
}
Re: svn commit: r889516 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear:
AbstractRealVector.java OpenMapRealVector.java
Posted by Luc Maisonobe <Lu...@free.fr>.
billbarker@apache.org a écrit :
> Author: billbarker
> Date: Fri Dec 11 06:38:20 2009
> New Revision: 889516
>
> URL: http://svn.apache.org/viewvc?rev=889516&view=rev
> Log:
> Initial fixes to the iterators.
Thanks a lot for your help, Bill.
Luc
>
> This fixes the default sparseIterator problem where a RealVector only contains zero elements, and add a sparseIterator to the OpenMapRealVector.
>
> Still TODO:
> 1) add unit tests
> 2) remove *mapTo and *mapToSelf from OpenMapRealVector
> 3) fix javadocs
> 4) remove support for non-zero default values in OpenMapRealVector
>
> Modified:
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java
>
> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java
> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java?rev=889516&r1=889515&r2=889516&view=diff
> ==============================================================================
> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java (original)
> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/AbstractRealVector.java Fri Dec 11 06:38:20 2009
> @@ -769,9 +769,15 @@
> if (current.getValue() == 0) {
> advance(current);
> }
> - next = new EntryImpl();
> - next.setIndex(current.getIndex());
> - advance(next);
> + if(current.getIndex() >= 0){
> + // There is at least one non-zero entry
> + next = new EntryImpl();
> + next.setIndex(current.getIndex());
> + advance(next);
> + } else {
> + // The vector consists of only zero entries, so deny having a next
> + current = null;
> + }
> }
>
> /** Advance an entry up to the next non null one.
>
> Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java
> URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java?rev=889516&r1=889515&r2=889516&view=diff
> ==============================================================================
> --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java (original)
> +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/OpenMapRealVector.java Fri Dec 11 06:38:20 2009
> @@ -1250,4 +1250,70 @@
> return (double)entries.size()/(double)getDimension();
> }
>
> + /** @{InheritDoc} */
> + public java.util.Iterator<Entry> sparseIterator() {
> + return new OpenMapSparseIterator();
> + }
> +
> + /**
> + * Implementation of <code>Entry</code> optimized for OpenMap.
> + * <p>This implementation does not allow arbitrary calls to <code>setIndex</code>
> + * since the order that entries are returned is undefined.
> + */
> + protected class OpenMapEntry extends Entry {
> + private final Iterator iter;
> +
> + protected OpenMapEntry(Iterator iter) {
> + this.iter = iter;
> + }
> + /** {@InheritDoc} */
> + @Override
> + public double getValue() {
> + return iter.value();
> + }
> +
> + /** {@InheritDoc} */
> + @Override
> + public void setValue(double value) {
> + entries.put(iter.key(), value);
> + }
> +
> + /** {@InheritDoc} */
> + @Override
> + public int getIndex() {
> + return iter.key();
> + }
> + }
> +
> + /**
> + * Iterator class to do iteration over just the non-zero elements.
> + * <p>This implementation is fail-fast, so cannot be used to modify any zero element.
> + *
> + */
> +
> + protected class OpenMapSparseIterator implements java.util.Iterator<Entry> {
> + private final Iterator iter;
> + private final Entry current;
> +
> + protected OpenMapSparseIterator() {
> + iter = entries.iterator();
> + current = new OpenMapEntry(iter);
> + }
> +
> + /** {@InheritDoc} */
> + public boolean hasNext() {
> + return iter.hasNext();
> + }
> +
> + /** {@InheritDoc} */
> + public Entry next() {
> + iter.advance();
> + return current;
> + }
> +
> + public void remove() {
> + throw new UnsupportedOperationException("Not supported");
> + }
> +
> + }
> }
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org