diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-09-10 21:28:40 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-09-10 21:28:40 -0300 |
| commit | 4c624c06bae3080a5dc8d92a78c75cf1f84a3970 (patch) | |
| tree | 004f74165a6f4e9caea377864e16e936bdf121d2 /BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks | |
| parent | 034ba698cc03f2c831b9e4603f55f4a55f955c80 (diff) | |
Add more BlockReaders
Adds a new type of block reader, the ToggleBlockReader. This switches
between two different sources every block.
Also, make sure all of the BlockReaders keep their own block count.
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks')
4 files changed, 75 insertions, 8 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/FilteredBlockReader.java b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/FilteredBlockReader.java index a9e5923..0ea3415 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/FilteredBlockReader.java +++ b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/FilteredBlockReader.java @@ -22,7 +22,7 @@ public class FilteredBlockReader implements BlockReader { /* * Number of blocks that passed the predicate. */ - private int passed; + private int blockNo; /* * The predicate blocks must pass. @@ -43,7 +43,7 @@ public class FilteredBlockReader implements BlockReader { pred = predic; failAction = failAct; - passed = 0; + blockNo = 0; } @Override @@ -58,7 +58,7 @@ public class FilteredBlockReader implements BlockReader { pending = source.next(); if(pred.test(pending)) { - passed += 1; + blockNo += 1; return true; } else { failAction.accept(pending); @@ -87,7 +87,7 @@ public class FilteredBlockReader implements BlockReader { @Override public int getBlockCount() { - return passed; + return blockNo; } @Override diff --git a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/MappedBlockReader.java b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/MappedBlockReader.java index a9cfa57..12fa848 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/MappedBlockReader.java +++ b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/MappedBlockReader.java @@ -11,9 +11,13 @@ public class MappedBlockReader implements BlockReader { private UnaryOperator<Block> transform; + private int blockNo; + public MappedBlockReader(BlockReader source, UnaryOperator<Block> trans) { reader = source; transform = trans; + + blockNo = 0; } @Override @@ -29,7 +33,8 @@ public class MappedBlockReader implements BlockReader { @Override public boolean nextBlock() { if(hasNextBlock()) { - current = transform.apply(reader.next()); + current = transform.apply(reader.next()); + blockNo += 1; return true; } @@ -39,7 +44,7 @@ public class MappedBlockReader implements BlockReader { @Override public int getBlockCount() { - return reader.getBlockCount(); + return blockNo; } @Override diff --git a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/ToggledBlockReader.java b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/ToggledBlockReader.java new file mode 100644 index 0000000..0be90f6 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/ToggledBlockReader.java @@ -0,0 +1,57 @@ +package bjc.utils.ioutils.blocks; + +import java.io.IOException; + +import bjc.utils.date.BooleanToggle; + +public class ToggledBlockReader { + private BlockReader leftSource; + private BlockReader rightSource; + + /* + * We choose the left source when this is true. + */ + private BooleanToggle leftToggle; + + private int blockNo; + + public ToggledBlockReader(BlockReader left, BlockReader right) { + leftSource = left; + rightSource = right; + + blockNo = 0; + + leftToggle = new BooleanToggle(); + } + + @Override + public boolean hasNextBlock() { + if(leftToggle.peek()) return left.hasNextBlock(); + else return right.hasNextBlock(); + } + + @Override + public Block getBlock() { + if(leftToggle.peek()) return left.getBlock(); + else return right.getBlock(); + } + + @Override + public boolean nextBlock() { + boolean succ; + + if(leftToggle.get()) { + succ = leftSource.nextBlock(); + } else { + succ = rightSource.nextBlock(); + } + + if(succ) blockNo += 1; + return succ; + } + + @Override + public int getBlockCount() { + return blockNo; + } +} diff --git a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/TriggeredBlockReader.java b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/TriggeredBlockReader.java index 74076bb..3a1e393 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/TriggeredBlockReader.java +++ b/BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/TriggeredBlockReader.java @@ -11,6 +11,8 @@ import java.io.IOException; public class TriggeredBlockReader implements BlockReader { private final BlockReader source; + private int blockNo; + /* * The action to fire. */ @@ -26,9 +28,10 @@ public class TriggeredBlockReader implements BlockReader { * The action to execute before reading a block. */ public TriggeredBlockReader(final BlockReader source, final Runnable action) { - super(); this.source = source; this.action = action; + + blockNo = 0; } @Override @@ -45,12 +48,14 @@ public class TriggeredBlockReader implements BlockReader { @Override public boolean nextBlock() { + blockNo += 1; + return source.nextBlock(); } @Override public int getBlockCount() { - return source.getBlockCount(); + return blockNo; } @Override |
