summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/esodata
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/esodata')
-rw-r--r--src/main/java/bjc/esodata/PushdownMap.java24
-rw-r--r--src/main/java/bjc/esodata/SimpleDirectory.java4
-rw-r--r--src/main/java/bjc/esodata/UnifiedDirectory.java4
3 files changed, 20 insertions, 12 deletions
diff --git a/src/main/java/bjc/esodata/PushdownMap.java b/src/main/java/bjc/esodata/PushdownMap.java
index a30161c..410eb53 100644
--- a/src/main/java/bjc/esodata/PushdownMap.java
+++ b/src/main/java/bjc/esodata/PushdownMap.java
@@ -1,7 +1,9 @@
package bjc.esodata;
+import java.util.*;
import java.util.function.*;
+import bjc.data.*;
import bjc.funcdata.*;
/**
@@ -48,8 +50,8 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType>
}
@Override
- public ValueType get(final KeyType key) {
- return backing.get(key).top();
+ public Optional<ValueType> get(final KeyType key) {
+ return backing.get(key).map((stack) -> stack.top());
}
@Override
@@ -67,7 +69,7 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType>
if (isFrozen) throw new ObjectFrozen("Can't insert key " + key + " into frozen map");
if (backing.containsKey(key)) {
- final Stack<ValueType> stk = backing.get(key);
+ final Stack<ValueType> stk = backing.get(key).get();
final ValueType vl = stk.top();
@@ -86,12 +88,18 @@ public class PushdownMap<KeyType, ValueType> implements IMap<KeyType, ValueType>
@Override
public ValueType remove(final KeyType key) {
if (isFrozen) throw new ObjectFrozen("Can't remove key " + key + " from frozen map");
-
- final Stack<ValueType> stk = backing.get(key);
-
- if (stk.size() > 1) return stk.pop();
- return backing.remove(key).top();
+ IHolder<ValueType> result = IHolder.of(null);
+
+ backing.get(key).ifPresent((stk) -> {
+ if (stk.size() > 1) {
+ result.replace(stk.pop());
+ } else {
+ result.replace(backing.remove(key).top());
+ }
+ });
+
+ return result.getValue();
}
@Override
diff --git a/src/main/java/bjc/esodata/SimpleDirectory.java b/src/main/java/bjc/esodata/SimpleDirectory.java
index 36f5f5a..ddc65b4 100644
--- a/src/main/java/bjc/esodata/SimpleDirectory.java
+++ b/src/main/java/bjc/esodata/SimpleDirectory.java
@@ -30,7 +30,7 @@ public class SimpleDirectory<K, V> implements Directory<K, V> {
@Override
public Directory<K, V> getSubdirectory(final K key) {
- return children.get(key);
+ return children.get(key).orElse(null);
}
@Override
@@ -50,7 +50,7 @@ public class SimpleDirectory<K, V> implements Directory<K, V> {
@Override
public V getKey(final K key) {
- return data.get(key);
+ return data.get(key).orElse(null);
}
@Override
diff --git a/src/main/java/bjc/esodata/UnifiedDirectory.java b/src/main/java/bjc/esodata/UnifiedDirectory.java
index dcbac89..abf9a4c 100644
--- a/src/main/java/bjc/esodata/UnifiedDirectory.java
+++ b/src/main/java/bjc/esodata/UnifiedDirectory.java
@@ -30,7 +30,7 @@ public class UnifiedDirectory<K, V> implements Directory<K, V> {
@Override
public Directory<K, V> getSubdirectory(final K key) {
- return children.get(key);
+ return children.get(key).orElse(null);
}
@Override
@@ -56,7 +56,7 @@ public class UnifiedDirectory<K, V> implements Directory<K, V> {
@Override
public V getKey(final K key) {
- return data.get(key);
+ return data.get(key).orElse(null);
}
@Override