Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | daniel-mar | 1 | package de.viathinksoft.distributed.apps.immortal.iterator.marschall.legacy; |
2 | |||
3 | import java.math.BigInteger; |
||
4 | import java.util.Iterator; |
||
5 | |||
6 | import de.viathinksoft.distributed.apps.immortal.exception.InitialNumberNotImmortableException; |
||
7 | import de.viathinksoft.distributed.apps.immortal.iterator.QuickImmortableCheck; |
||
8 | |||
9 | //TODO: Iterable aufspalten? |
||
10 | |||
11 | public class MarschallIterator implements Iterator<BigInteger>, Iterable<BigInteger> { |
||
12 | |||
13 | private BigInteger position; |
||
14 | |||
15 | public MarschallIterator(BigInteger start) throws InitialNumberNotImmortableException { |
||
16 | if (!QuickImmortableCheck.check(start)) { |
||
17 | throw new InitialNumberNotImmortableException(); |
||
18 | } |
||
19 | |||
20 | this.position = start; |
||
21 | } |
||
22 | |||
23 | @Override |
||
24 | public boolean hasNext() { |
||
25 | return true; |
||
26 | } |
||
27 | |||
28 | @Override |
||
29 | public BigInteger next() { |
||
30 | String s = position.toString(); |
||
31 | BigInteger prefixTrial = BigInteger.ZERO; |
||
32 | BigInteger chk; |
||
33 | do { |
||
34 | prefixTrial = prefixTrial.add(BigInteger.ONE); |
||
35 | chk = new BigInteger(prefixTrial.toString().concat(s)); |
||
36 | } while (!QuickImmortableCheck.check(chk)); |
||
37 | position = chk; |
||
38 | |||
39 | return position; |
||
40 | } |
||
41 | |||
42 | @Override |
||
43 | public void remove() { |
||
44 | throw new UnsupportedOperationException(); |
||
45 | } |
||
46 | |||
47 | @Override |
||
48 | public Iterator<BigInteger> iterator() { |
||
49 | return this; |
||
50 | } |
||
51 | } |