added KVStore

This commit is contained in:
Djeeberjr 2022-03-12 17:18:12 +01:00
parent 7f6e8bb273
commit 72dfcb1aa1

70
src/lib/KVStore.hx Normal file
View File

@ -0,0 +1,70 @@
package lib;
import haxe.Serializer;
import haxe.Unserializer;
import kernel.fs.FS;
import haxe.ds.StringMap;
/**
Key value store with persistence.
**/
class KVStore {
private var kvStore: StringMap<Dynamic> = new StringMap();
private final namespace:String;
public function new(namespace: String) {
this.namespace = namespace;
}
private static function getNamespaceFile(namespace: String): String {
return '/$namespace';
}
public function load() {
if (FS.exists(getNamespaceFile(namespace))){
var handle = FS.openRead("/" + namespace);
parseFile(handle.readAll());
}
}
public function save() {
var handle = FS.openWrite(getNamespaceFile(this.namespace));
handle.write(Serializer.run(this.kvStore));
handle.close();
}
private function parseFile(content: String) {
var unserializer = new Unserializer(content);
this.kvStore = unserializer.unserialize();
}
public inline function set(key: String, value: Dynamic) {
this.kvStore.set(key,value);
}
public inline function get<T>(key: String): Null<T> {
return this.kvStore.get(key);
}
public inline function exists(key: String): Bool {
return this.kvStore.exists(key);
}
public inline function clear() {
this.kvStore.clear();
}
public inline function remove(key: String): Bool {
return this.kvStore.remove(key);
}
public inline function keys(): Iterator<String> {
return this.kvStore.keys();
}
public inline function keyValueIterator():KeyValueIterator<String, Dynamic> {
return this.kvStore.keyValueIterator();
}
}