summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-09-10 21:28:40 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2017-09-10 21:28:40 -0300
commit4c624c06bae3080a5dc8d92a78c75cf1f84a3970 (patch)
tree004f74165a6f4e9caea377864e16e936bdf121d2 /BJC-Utils2/src/main/java/bjc/utils
parent034ba698cc03f2c831b9e4603f55f4a55f955c80 (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')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/FilteredBlockReader.java8
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/MappedBlockReader.java9
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/ToggledBlockReader.java57
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/ioutils/blocks/TriggeredBlockReader.java9
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