Skip to content

Commit 2d29a3b

Browse files
committed
add MemoryStore
1 parent acd8cc0 commit 2d29a3b

1 file changed

Lines changed: 85 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dev.zarr.zarrjava.store;
2+
3+
import javax.annotation.Nonnull;
4+
import javax.annotation.Nullable;
5+
import java.nio.ByteBuffer;
6+
import java.util.HashMap;
7+
import java.util.HashSet;
8+
import java.util.Map;
9+
import java.util.Set;
10+
import java.util.stream.Stream;
11+
12+
public class MemoryStore implements Store, Store.ListableStore {
13+
private final Map<String[], byte[]> map = new HashMap<>();
14+
15+
@Override
16+
public boolean exists(String[] keys) {
17+
return map.containsKey(keys);
18+
}
19+
20+
@Nullable
21+
@Override
22+
public ByteBuffer get(String[] keys) {
23+
return get(keys, 0);
24+
}
25+
26+
@Nullable
27+
@Override
28+
public ByteBuffer get(String[] keys, long start) {
29+
return get(keys, start, -1);
30+
}
31+
32+
@Nullable
33+
@Override
34+
public ByteBuffer get(String[] keys, long start, long end) {
35+
if(end>Integer.MAX_VALUE) throw new RuntimeException("TODO");
36+
if(!map.containsKey(keys)) return null; //TODO: necessary?
37+
if (end < 0) end = map.get(keys).length - end;
38+
return ByteBuffer.wrap(map.get(keys), (int) start, (int) end);
39+
}
40+
41+
42+
@Override
43+
public void set(String[] keys, ByteBuffer bytes) {
44+
map.put(keys, bytes.array());
45+
}
46+
47+
@Override
48+
public void delete(String[] keys) {
49+
map.remove(keys);
50+
}
51+
52+
public Stream<String> list(String[] keys) {
53+
Set<String> allKeys = new HashSet<>();
54+
for(String[] k: map.keySet()){
55+
if (!equalFirstKeys(k, keys, keys.length));
56+
String key = "";
57+
for (String s : k) {
58+
key += s + "/";
59+
allKeys.add(key);
60+
}
61+
}
62+
return allKeys.stream();
63+
}
64+
65+
@Nonnull
66+
@Override
67+
public StoreHandle resolve(String... keys) {
68+
return new StoreHandle(this, keys);
69+
}
70+
71+
@Override
72+
public String toString() {
73+
return String.format("<MemoryStore {%s}>", hashCode());
74+
}
75+
76+
private boolean equalFirstKeys(String[] k1, String[] k2, int n){
77+
if (k1.length < n || k2.length < n) return false;
78+
for (int i = 0; i < n; i++) {
79+
if(!k1[i].equals(k2[i]))
80+
return false;
81+
}
82+
return true;
83+
}
84+
85+
}

0 commit comments

Comments
 (0)