summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/data')
-rw-r--r--src/main/java/bjc/data/Contexts.java96
-rw-r--r--src/main/java/bjc/data/GeneratingIterator.java2
-rw-r--r--src/main/java/bjc/data/MarkListIterator.java9
-rw-r--r--src/main/java/bjc/data/Pair.java14
4 files changed, 71 insertions, 50 deletions
diff --git a/src/main/java/bjc/data/Contexts.java b/src/main/java/bjc/data/Contexts.java
index b028ad1..f587fe6 100644
--- a/src/main/java/bjc/data/Contexts.java
+++ b/src/main/java/bjc/data/Contexts.java
@@ -37,67 +37,67 @@ public class Contexts {
public static Context create(Context parent) {
return new ContextImpl(parent);
}
+}
- private static class NullContextImpl implements Context {
- @Override
- public Context getParent() {
- return this;
- }
+class NullContextImpl implements Context {
+ @Override
+ public Context getParent() {
+ return this;
+ }
- @Override
- public void register(String name, Object o) {
- throw new UnsupportedOperationException();
- }
+ @Override
+ public void register(String name, Object o) {
+ throw new UnsupportedOperationException();
+ }
- @Override
- public Object get(String name) {
- throw new NoSuchElementException();
- }
-
- @Override
- public <T> T get(Class<T> contract) {
- throw new NoSuchElementException();
- }
+ @Override
+ public Object get(String name) {
+ throw new NoSuchElementException();
}
+
+ @Override
+ public <T> T get(Class<T> contract) {
+ throw new NoSuchElementException();
+ }
+}
- private static class ContextImpl implements Context {
+class ContextImpl implements Context {
- private final Context parent;
+ private final Context parent;
- private final Map<String, Object> objects;
+ private final Map<String, Object> objects;
- public ContextImpl(Context parent) {
- this.parent = parent;
- this.objects = new HashMap<>();
- }
+ public ContextImpl(Context parent) {
+ this.parent = parent;
+ this.objects = new HashMap<>();
+ }
- @Override
- public void register(String name, Object o) {
- objects.put(name, o);
- }
+ @Override
+ public void register(String name, Object o) {
+ objects.put(name, o);
+ }
- @Override
- public Object get(String name) {
- if (objects.containsKey(name)) {
- return objects.get(name);
- }
- return parent.get(name);
+ @Override
+ public Object get(String name) {
+ if (objects.containsKey(name)) {
+ return objects.get(name);
}
+ return parent.get(name);
+ }
- @SuppressWarnings("unchecked")
- @Override
- public <T> T get(Class<T> contract) {
- for (Object o : objects.values()) {
- if (contract.isInstance(o)) {
- return (T) o;
- }
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T get(Class<T> contract) {
+ for (Object o : objects.values()) {
+ if (contract.isInstance(o)) {
+ return (T) o;
}
- return parent.get(contract);
}
+ return parent.get(contract);
+ }
- @Override
- public Context getParent() {
- return parent;
- }
+ @Override
+ public Context getParent() {
+ return parent;
}
-}
+} \ No newline at end of file
diff --git a/src/main/java/bjc/data/GeneratingIterator.java b/src/main/java/bjc/data/GeneratingIterator.java
index f926833..8900b94 100644
--- a/src/main/java/bjc/data/GeneratingIterator.java
+++ b/src/main/java/bjc/data/GeneratingIterator.java
@@ -42,7 +42,7 @@ public class GeneratingIterator<E> implements Iterator<E> {
@Override
public boolean hasNext() {
- return stpper.test(state);
+ return !stpper.test(state);
}
/*
diff --git a/src/main/java/bjc/data/MarkListIterator.java b/src/main/java/bjc/data/MarkListIterator.java
index 725b050..35baa28 100644
--- a/src/main/java/bjc/data/MarkListIterator.java
+++ b/src/main/java/bjc/data/MarkListIterator.java
@@ -34,6 +34,15 @@ public class MarkListIterator<E> implements ListIterator<E> {
}
/**
+ * Get the current element of the iterator.
+ *
+ * @return The current iterator of the element
+ */
+ public E current() {
+ return cache.get(currIdx);
+ }
+
+ /**
* Create a new marking list iterator.
*
* @param backing The iterable to get the backing iterator from.
diff --git a/src/main/java/bjc/data/Pair.java b/src/main/java/bjc/data/Pair.java
index baf1894..1d4be5e 100644
--- a/src/main/java/bjc/data/Pair.java
+++ b/src/main/java/bjc/data/Pair.java
@@ -1,5 +1,8 @@
package bjc.data;
+import java.util.Formattable;
+import java.util.FormattableFlags;
+import java.util.Formatter;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Function;
@@ -18,7 +21,7 @@ import bjc.funcdata.theory.Bifunctor;
* The type of the right side of the pair.
*
*/
-public interface Pair<LeftType, RightType> extends Bifunctor<LeftType, RightType> {
+public interface Pair<LeftType, RightType> extends Bifunctor<LeftType, RightType>, Formattable {
/**
* Bind a function across the values in this pair.
*
@@ -247,4 +250,13 @@ public interface Pair<LeftType, RightType> extends Bifunctor<LeftType, RightType
public static <Left, Right> Pair<Left, Right> pair(Left left, Right right) {
return new SimplePair<>(left, right);
}
+
+ @Override
+ default void formatTo(Formatter formatter, int flags, int width, int precision) {
+ if ((flags & FormattableFlags.ALTERNATE) != 0) {
+ formatter.format("(%s, %s)", getLeft(), getRight());
+ } else {
+ formatter.format("Pair [l=%s, r=%s", getLeft(), getRight());
+ }
+ }
}