|
|
@@ -1,22 +1,30 @@
|
|
|
package net.ranides.assira.collection.prototype;
|
|
|
|
|
|
+import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
-import java.util.Optional;
|
|
|
-import java.util.Set;
|
|
|
|
|
|
public class PrototypeHashMap extends AbstractPrototype.BaseMap {
|
|
|
|
|
|
private final PrototypeMap parent;
|
|
|
|
|
|
- private final PrototypeMap declared = new HashWrapper();
|
|
|
+ private final PrototypeMap declared;
|
|
|
|
|
|
public PrototypeHashMap() {
|
|
|
- this(null);
|
|
|
+ this(null, Collections.emptyMap());
|
|
|
}
|
|
|
|
|
|
public PrototypeHashMap(PrototypeMap parent) {
|
|
|
+ this(parent, Collections.emptyMap());
|
|
|
+ }
|
|
|
+
|
|
|
+ public PrototypeHashMap(Map<Object, ?> content) {
|
|
|
+ this(null, content);
|
|
|
+ }
|
|
|
+
|
|
|
+ public PrototypeHashMap(PrototypeMap parent, Map<Object, ?> content) {
|
|
|
this.parent = parent;
|
|
|
+ this.declared = new AbstractPrototype.MapWrapper(this, new HashMap<>(content));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -29,50 +37,4 @@ public class PrototypeHashMap extends AbstractPrototype.BaseMap {
|
|
|
return declared;
|
|
|
}
|
|
|
|
|
|
- private class HashWrapper extends AbstractPrototype.DeclaredMap {
|
|
|
- private final Map<Object, Object> data = new HashMap<>();
|
|
|
-
|
|
|
- @Override
|
|
|
- public PrototypeMap parent() {
|
|
|
- return PrototypeHashMap.this.parent;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Set<Object> keys() {
|
|
|
- return data.keySet();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean has(String key) {
|
|
|
- return data.containsKey(key);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean has(PrototypeField<?> key) {
|
|
|
- return data.containsKey(key);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Optional<Object> get(String key) {
|
|
|
- return Optional.ofNullable(data.get(key));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public <V> Optional<V> get(PrototypeField<V> key) {
|
|
|
- return Optional.ofNullable(data.get(key)).map(key.type()::cast);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean set(String key, Object value) {
|
|
|
- data.put(key, value);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public <V> boolean set(PrototypeField<V> key, V value) {
|
|
|
- data.put(key, value);
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
}
|