Libraryless. Click here for Pure Java version (4136L/24K).
sclass FileBasedStringMap extends AbstractMap<S> {
File dir;
bool compress; // use .gz
*() {}
*(File *dir) {}
public S get(O a) {
File f = fileForKey(a);
ret dropFirstLine(compress ? loadGZTextFile(f) : loadTextFile(f));
}
public synchronized Set<Map.Entry<S,S>> entrySet() {
Set<Map.Entry<S,S>> set = new HashSet;
for (File f : listFiles(dir)) {
S md5 = md5FromUniqueFile(f);
if (md5 == null) continue;
fS key = unquote(compress ? firstLineFromGZTextFile(f) : firstLineFromFile(f));
set.add(new Map.Entry<S,S>() {
public S getKey() { ret key; }
public S getValue() { ret get(key); }
public S setValue(S s) { S old = get(key); put(key, s); ret old; }
public bool equals(O o) {
if (!(o instanceof Map.Entry)) false;
Map.Entry e = (Map.Entry) o;
ret eq(getKey(), e.getKey()) && eq(getValue(), e.getValue());
}
public int hashCode() {
S s = getValue();
ret (getKey()==null ? 0 : getKey().hashCode())
^ (s == null ? 0 : s.hashCode());
}
});
}
ret set;
}
public S put(S a, S b) {
S old = get(a);
S text = b == null ? null : quote(a) + "\n" + b;
if (compress)
saveGZTextFile(fileForKey(a), text);
else
saveTextFile(fileForKey(a), text);
ret old;
}
public S remove(O a) {
if (!isString(a)) null;
ret put((S) a, null);
}
File fileForKey(O key) {
if (!isString(key)) null;
ret new File(assertNotNull(dir), uniqueFileNameUsingMD5_80((S) key) + (compress ? ".gz" : ".txt"));
}
}download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1015851 |
| Snippet name: | FileBasedStringMap (OK) |
| Eternal ID of this version: | #1015851/19 |
| Text MD5: | 3de2c02edade5345fd8c2591a2858d02 |
| Transpilation MD5: | 7ab041e089a5b3d75cbdaa326b1e8563 |
| Author: | stefan |
| Category: | javax / gui |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-08-27 03:46:18 |
| Source code size: | 1687 bytes / 57 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 917 / 1621 |
| Version history: | 18 change(s) |
| Referenced in: | #1034167 - Standard Classes + Interfaces (LIVE, continuation of #1003674) |