diff --git a/src/lib/KVStore.hx b/src/lib/KVStore.hx new file mode 100644 index 0000000..2d59931 --- /dev/null +++ b/src/lib/KVStore.hx @@ -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 = 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(); + } +}