From 75793d0ced5f9f9d4db267cfa955e76a4a6b9383 Mon Sep 17 00:00:00 2001 From: Kevin Jahns <kevin.jahns@rwth-aachen.de> Date: Sun, 28 Jun 2015 01:42:17 +0200 Subject: [PATCH] added memory data store --- src/Connectors/Test.js | 2 +- src/Operations.js | 45 ++++++++++++++++++++++++++++++++++++++++++ src/y.js | 9 +++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/Connectors/Test.js b/src/Connectors/Test.js index 0e1ac5d1..305d308f 100644 --- a/src/Connectors/Test.js +++ b/src/Connectors/Test.js @@ -1,4 +1,4 @@ -// returns a rendom element of o +// returns a random element of o // works on Object, and Array function getRandom (o) { if (o instanceof Array) { diff --git a/src/Operations.js b/src/Operations.js index 84937ed0..9f323080 100644 --- a/src/Operations.js +++ b/src/Operations.js @@ -169,5 +169,50 @@ var Struct = { o = yield* Struct.Insert.create.call(this, {}, content, o, or, op); } } + }, + Map: { + create: function*( op : Op){ + op.start = null; + op.end = null; + op.struct = "Map"; + return yield* Struct.Operation.create.call(this, op); + }, + requiredOps: function(op, ids){ + if (op.start != null) { + ids.push(op.start); + } + if (op.end != null){ + ids.push(op.end); + } + return ids; + }, + execute: function* () { + // nop + }, + ref: function* (op : Op, pos : number) : Insert { + var o = op.start; + while ( pos !== 0 || o != null) { + o = (yield* this.getOperation(o)).right; + pos--; + } + return (o == null) ? null : yield* this.getOperation(o); + }, + map: function* (o : Op, f : Function) : Array<any> { + o = o.start; + var res = []; + while ( o != null) { + var operation = yield* this.getOperation(o); + res.push(f(operation.content)); + o = operation.right; + } + return res; + }, + insert: function* (op, pos : number, contents : Array<any>) { + var o = yield* Struct.List.ref.call(this, op, pos); + var or = yield* this.getOperation(o.right); + for (var content of contents) { + o = yield* Struct.Insert.create.call(this, {}, content, o, or, op); + } + } } }; diff --git a/src/y.js b/src/y.js index 84735497..574ff12e 100644 --- a/src/y.js +++ b/src/y.js @@ -8,4 +8,13 @@ class Y { //eslint-disable-line no-unused-vars transact (generator) { this.db.requestTransaction(generator); } + destroy () { + this.connector.disconnect(); + this.db.removeDatabase(); + this.connector = null; + this.db = null; + this.transact = function(){ + throw new Error("Remember?, you destroyed this type ;)"); + }; + } } -- GitLab