Subversion Repositories distributed

Rev

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

  1. package de.viathinksoft.distributed.apps.immortal.iterator.marschall;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.Iterator;
  5.  
  6. import de.viathinksoft.distributed.apps.immortal.exception.InitialNumberIsOneException;
  7. import de.viathinksoft.distributed.apps.immortal.exception.InitialNumberNotImmortableException;
  8. import de.viathinksoft.distributed.apps.immortal.iterator.QuickImmortableCheck;
  9.  
  10. public class MarschallSectionIterator implements
  11.                 Iterator<SectionImmortableNumber>, Iterable<SectionImmortableNumber> {
  12.  
  13.         private SectionImmortableNumber position;
  14.  
  15.         public MarschallSectionIterator(SectionImmortableNumber start)
  16.                         throws InitialNumberNotImmortableException {
  17.                 if (!QuickImmortableCheck.check(start.toBigInteger())) {
  18.                         throw new InitialNumberNotImmortableException();
  19.                 }
  20.  
  21.                 this.position = start;
  22.         }
  23.  
  24.         public MarschallSectionIterator(BigInteger start)
  25.                         throws InitialNumberNotImmortableException,
  26.                         InitialNumberIsOneException {
  27.                 this(new SectionImmortableNumber(start));
  28.         }
  29.  
  30.         public MarschallSectionIterator(int start)
  31.                         throws InitialNumberNotImmortableException,
  32.                         InitialNumberIsOneException {
  33.                 this(new SectionImmortableNumber(start));
  34.         }
  35.  
  36.         @Override
  37.         public boolean hasNext() {
  38.                 return true;
  39.         }
  40.  
  41.         @Override
  42.         public SectionImmortableNumber next() {
  43.                 String s = position.toBigInteger().toString();
  44.                 BigInteger prefixTrial = BigInteger.ZERO;
  45.                 BigInteger chk;
  46.                 do {
  47.                         prefixTrial = prefixTrial.add(BigInteger.ONE);
  48.                         chk = new BigInteger(prefixTrial.toString().concat(s));
  49.                 } while (!QuickImmortableCheck.check(chk));
  50.                
  51.                 SectionImmortableNumber neu = (SectionImmortableNumber) position.clone();
  52.                 neu.add(prefixTrial);
  53.                 position = neu;
  54.                
  55.                 return position;
  56.         }
  57.  
  58.         @Override
  59.         public void remove() {
  60.                 throw new UnsupportedOperationException();
  61.         }
  62.  
  63.         @Override
  64.         public Iterator<SectionImmortableNumber> iterator() {
  65.                 return this;
  66.         }
  67. }
  68.