Subversion Repositories distributed

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. package de.viathinksoft.distributed.apps.immortal.deepcheck;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.Iterator;
  5.  
  6. // TODO: Iterable aufspalten?
  7.  
  8. public class DeepImmortalCheckIterator implements Iterator<DeepImmortalCheckState>,
  9.                 Iterable<DeepImmortalCheckState> {
  10.  
  11.         private DeepImmortalCheckState position;
  12.  
  13.         public DeepImmortalCheckIterator(DeepImmortalCheckState start) {
  14.                 this.position = start;
  15.         }
  16.  
  17.         @Override
  18.         public boolean hasNext() {
  19.                 return true;
  20.         }
  21.  
  22.         @Override
  23.         public DeepImmortalCheckState next() {
  24.                 if (!position.isImmortal() && (position.getCount().compareTo(BigInteger.ZERO) > 0)) return position;
  25.                
  26.                 BigInteger lastResult = position.getLastResult();
  27.                 BigInteger initialNumber = position.getInitialNumber();
  28.                 BigInteger counter = position.getCount().add(BigInteger.ONE);
  29.  
  30.                 lastResult = lastResult.multiply(initialNumber);
  31.                 boolean isImmortable = lastResult.toString().endsWith(initialNumber.toString());
  32.                
  33.                 position = new DeepImmortalCheckState(isImmortable, counter, initialNumber, lastResult);
  34.  
  35.                 return position;
  36.         }
  37.  
  38.         @Override
  39.         public void remove() {
  40.                 throw new UnsupportedOperationException();
  41.         }
  42.  
  43.         @Override
  44.         public Iterator<DeepImmortalCheckState> iterator() {
  45.                 return this;
  46.         }
  47.  
  48. }
  49.