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 = 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(key: String): Null { 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 { return this.kvStore.keys(); } public inline function keyValueIterator():KeyValueIterator { return this.kvStore.keyValueIterator(); } }