1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.giraph.block_app.framework.block;
19
20 import java.util.Iterator;
21
22 import org.apache.giraph.block_app.framework.piece.AbstractPiece;
23 import org.apache.giraph.function.Consumer;
24 import org.apache.giraph.function.Supplier;
25
26
27
28
29 @SuppressWarnings("rawtypes")
30 public final class IfBlock implements Block {
31 private final Block thenBlock;
32 private final Block elseBlock;
33 private final Supplier<Boolean> condition;
34
35 public IfBlock(
36 Supplier<Boolean> condition, Block thenBlock, Block elseBlock) {
37 this.condition = condition;
38 this.thenBlock = thenBlock;
39 this.elseBlock = elseBlock;
40 }
41
42 public IfBlock(Supplier<Boolean> condition, Block thenBlock) {
43 this.condition = condition;
44 this.thenBlock = thenBlock;
45 this.elseBlock = new EmptyBlock();
46 }
47
48 @Override
49 public Iterator<AbstractPiece> iterator() {
50 if (Boolean.TRUE.equals(condition.get())) {
51 return thenBlock.iterator();
52 } else {
53 return elseBlock.iterator();
54 }
55 }
56
57 @Override
58 public void forAllPossiblePieces(Consumer<AbstractPiece> consumer) {
59 thenBlock.forAllPossiblePieces(consumer);
60 elseBlock.forAllPossiblePieces(consumer);
61 }
62
63 @Override
64 public PieceCount getPieceCount() {
65 PieceCount thenCount = thenBlock.getPieceCount();
66 PieceCount elseCount = elseBlock.getPieceCount();
67 return thenCount.equals(elseCount) ?
68 thenCount : PieceCount.createUnknownCount();
69 }
70
71 @Override
72 public String toString() {
73 if (elseBlock instanceof EmptyBlock) {
74 return "IfBlock(" + thenBlock + ")";
75 }
76 return "IfBlock(" + thenBlock + " , " + elseBlock + ")";
77 }
78 }