Author: bpoussin Date: 2012-08-31 20:16:22 +0200 (Fri, 31 Aug 2012) New Revision: 446 Url: http://nuiton.org/repositories/revision/nuiton-matrix/446 Log: il faut aussi decorer l'iterator Modified: trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixSemanticsDecorator.java Modified: trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixSemanticsDecorator.java =================================================================== --- trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixSemanticsDecorator.java 2012-08-31 17:29:07 UTC (rev 445) +++ trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixSemanticsDecorator.java 2012-08-31 18:16:22 UTC (rev 446) @@ -171,7 +171,7 @@ @Override public MatrixIterator iterator() { - return matrix.iterator(); + return new SemanticsDecoratorMatrixIterator(decorator, matrix.iterator()); } @Override @@ -520,4 +520,44 @@ return matrix.equalsValues(mat); } + static public class SemanticsDecoratorMatrixIterator implements MatrixIterator { + + protected SemanticsDecorator decorator; + protected MatrixIterator iterator; + + public SemanticsDecoratorMatrixIterator(SemanticsDecorator decorator, MatrixIterator iterator) { + this.decorator = decorator; + this.iterator = iterator; + } + + public Object[] getSemanticsCoordinates() { + Object[] tmp = iterator.getSemanticsCoordinates(); + Object[] result = new Object[tmp.length]; + for (int i=0; i<tmp.length; i++) { + result[i] = decorator.decorate(tmp[i]); + } + return result; + } + + public boolean hasNext() { + return iterator.hasNext(); + } + + public boolean next() { + return iterator.next(); + } + + public int[] getCoordinates() { + return iterator.getCoordinates(); + } + + public double getValue() { + return iterator.getValue(); + } + + public void setValue(double value) { + iterator.setValue(value); + } + + } }