diff options
| author | Ben Culkin <scorpress@gmail.com> | 2020-11-17 17:44:05 -0500 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2020-11-17 17:44:05 -0500 |
| commit | 213171f95845ebc5efcfa73d1cab4b723ff2abf2 (patch) | |
| tree | e0c167842d8923e5a0235a9e64fc0d7fe7201cf8 /src/main/java/bjc/funcdata/TransformedValueMap.java | |
| parent | 38e97f991ee69afd53f36fd7296b4afd5a621311 (diff) | |
Implement IFreezable for IMap
Diffstat (limited to 'src/main/java/bjc/funcdata/TransformedValueMap.java')
| -rw-r--r-- | src/main/java/bjc/funcdata/TransformedValueMap.java | 63 |
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 |
