From 213171f95845ebc5efcfa73d1cab4b723ff2abf2 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Tue, 17 Nov 2020 17:44:05 -0500 Subject: Implement IFreezable for IMap --- .../java/bjc/funcdata/TransformedValueMap.java | 63 ++++++++++++++++------ 1 file changed, 48 insertions(+), 15 deletions(-) (limited to 'src/main/java/bjc/funcdata/TransformedValueMap.java') diff --git a/src/main/java/bjc/funcdata/TransformedValueMap.java b/src/main/java/bjc/funcdata/TransformedValueMap.java index 5de6fc3..e51c9eb 100644 --- a/src/main/java/bjc/funcdata/TransformedValueMap.java +++ b/src/main/java/bjc/funcdata/TransformedValueMap.java @@ -1,8 +1,6 @@ package bjc.funcdata; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; +import java.util.function.*; /** * A map that transforms values from one type to another @@ -26,6 +24,9 @@ final class TransformedValueMap /* Our transforming function. */ private final Function transformer; + private boolean isFrozen = false; + private boolean thawEnabled = true; + /** * Create a new transformed-value loop. * @@ -43,6 +44,8 @@ final class TransformedValueMap @Override public void clear() { + if (isFrozen) throw new ObjectFrozen("Can't clear frozen map"); + backing.clear(); } @@ -51,11 +54,6 @@ final class TransformedValueMap return backing.containsKey(key); } - @Override - public IMap extend() { - return new ExtendedMap<>(this, new FunctionalMap<>()); - } - @Override public void forEach(final BiConsumer action) { backing.forEach((key, value) -> { @@ -90,12 +88,6 @@ final class TransformedValueMap return backing.keyList(); } - @Override - public IMap - transform(final Function transform) { - return new TransformedValueMap<>(this, transform); - } - @Override public NewValue put(final OldKey key, final NewValue value) { throw new UnsupportedOperationException("Can't add items to transformed map"); @@ -103,6 +95,8 @@ final class TransformedValueMap @Override public NewValue remove(final OldKey key) { + if (isFrozen) throw new ObjectFrozen("Can't remove key " + key + " from frozen map"); + return transformer.apply(backing.remove(key)); } @@ -115,4 +109,43 @@ final class TransformedValueMap public IList valueList() { return backing.valueList().map(transformer); } -} + + @Override + public boolean freeze() { + isFrozen = true; + + return true; + } + + @Override + public boolean thaw() { + if (thawEnabled) { + isFrozen = false; + return true; + } else { + return false; + } + } + + @Override + public boolean deepFreeze() { + thawEnabled = false; + + return freeze(); + } + + @Override + public boolean canFreeze() { + return true; + } + + @Override + public boolean canThaw() { + return thawEnabled; + } + + @Override + public boolean isFrozen() { + return isFrozen; + } +} \ No newline at end of file -- cgit v1.2.3