summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/funcdata/TransformedValueMap.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-11-17 17:44:05 -0500
committerBen Culkin <scorpress@gmail.com>2020-11-17 17:44:05 -0500
commit213171f95845ebc5efcfa73d1cab4b723ff2abf2 (patch)
treee0c167842d8923e5a0235a9e64fc0d7fe7201cf8 /src/main/java/bjc/funcdata/TransformedValueMap.java
parent38e97f991ee69afd53f36fd7296b4afd5a621311 (diff)
Implement IFreezable for IMap
Diffstat (limited to 'src/main/java/bjc/funcdata/TransformedValueMap.java')
-rw-r--r--src/main/java/bjc/funcdata/TransformedValueMap.java63
1 files changed, 48 insertions, 15 deletions
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<OldKey, OldValue, NewValue>
/* Our transforming function. */
private final Function<OldValue, NewValue> transformer;
+ private boolean isFrozen = false;
+ private boolean thawEnabled = true;
+
/**
* Create a new transformed-value loop.
*
@@ -43,6 +44,8 @@ final class TransformedValueMap<OldKey, OldValue, NewValue>
@Override
public void clear() {
+ if (isFrozen) throw new ObjectFrozen("Can't clear frozen map");
+
backing.clear();
}
@@ -52,11 +55,6 @@ final class TransformedValueMap<OldKey, OldValue, NewValue>
}
@Override
- public IMap<OldKey, NewValue> extend() {
- return new ExtendedMap<>(this, new FunctionalMap<>());
- }
-
- @Override
public void forEach(final BiConsumer<OldKey, NewValue> action) {
backing.forEach((key, value) -> {
action.accept(key, transformer.apply(value));
@@ -91,18 +89,14 @@ final class TransformedValueMap<OldKey, OldValue, NewValue>
}
@Override
- public <MappedValue> IMap<OldKey, MappedValue>
- transform(final Function<NewValue, MappedValue> 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");
}
@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<OldKey, OldValue, NewValue>
public IList<NewValue> 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