From 83e82658c5d6fc91c2c704db3e24cbabaf4358cf Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 25 May 2014 13:30:17 -0400 Subject: [PATCH] Sundry set API renamings and additions --- route.js | 31 +++++++++++++++++++++++-------- tr.js | 32 ++++++++++++++++---------------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/route.js b/route.js index 24d6a04..37feabd 100644 --- a/route.js +++ b/route.js @@ -201,10 +201,10 @@ function Routing(exports) { /////////////////////////////////////////////////////////////////////////// // Enough of sets to get by with - function newSet() { + function arrayToSet(xs) { var s = {}; - for (var i = 0; i < arguments.length; i++) { - s[arguments[i]] = arguments[i]; + for (var i = 0; i < xs.length; i++) { + s[JSON.stringify(xs[i])] = xs[i]; } return s; } @@ -222,7 +222,7 @@ function Routing(exports) { return s; } - function setEmpty(s) { + function is_emptySet(s) { for (var k in s) { if (s.hasOwnProperty(k)) return false; @@ -240,6 +240,16 @@ function Routing(exports) { return s; } + function setIntersect(s1, s2) { + var s = {}; + for (var key in s1) { + if (s1.hasOwnProperty(key) && s2.hasOwnProperty(key)) { + s[key] = s1[key]; + } + } + return s; + } + function setUnionInplace(acc, s) { for (var key in s) { if (s.hasOwnProperty(key)) { @@ -276,7 +286,7 @@ function Routing(exports) { var erasePathSuccesses = function (v1, v2) { var r = setSubtract(v1, v2); - if (setEmpty(r)) return null; + if (is_emptySet(r)) return null; return r; }; @@ -597,7 +607,7 @@ function Routing(exports) { // TODO: better name for this function matchMatcher(o1, o2, seed) { - var acc = seed || newSet(); // will be modified in place + var acc = seed || {}; // will be modified in place walk(o1, o2); return acc; @@ -1217,7 +1227,7 @@ function Routing(exports) { }; Gestalt.prototype.label = function (pid) { - var pids = newSet(pid); + var pids = arrayToSet([pid]); return this.transform(function (m) { return relabel(m, function (v) { return pids; }); }); }; @@ -1252,7 +1262,12 @@ function Routing(exports) { /////////////////////////////////////////////////////////////////////////// exports.__ = __; - exports.newSet = newSet; + exports.arrayToSet = arrayToSet; + exports.setUnion = setUnion; + exports.setSubtract = setSubtract; + exports.setIntersect = setIntersect; + exports.setEqual = setEqual; + exports.is_emptySet = is_emptySet; exports.$Capture = $Capture; exports._$ = _$; exports.is_emptyMatcher = is_emptyMatcher; diff --git a/tr.js b/tr.js index 91dace6..d38b7a8 100644 --- a/tr.js +++ b/tr.js @@ -18,8 +18,8 @@ function dumpG(g) { return g; } -mAny = r.compilePattern(r.newSet('mAny'), r.__); -mAAny = r.compilePattern(r.newSet('mAAny'), ['A', r.__]); +mAny = r.compilePattern(r.arrayToSet(['mAny']), r.__); +mAAny = r.compilePattern(r.arrayToSet(['mAAny']), ['A', r.__]); dumpM(mAny); dumpM(mAAny); @@ -37,30 +37,30 @@ dump(r.matchValue(mAAny, ['A', [['hi']]])); console.log("unions"); -dumpM(r.union(r.compilePattern(r.newSet('A'), [r.__, 'A']), - r.compilePattern(r.newSet('B'), [r.__, 'B']))); +dumpM(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 'A']), + r.compilePattern(r.arrayToSet(['B']), [r.__, 'B']))); -dumpM(r.union(r.compilePattern(r.newSet('A'), [r.__, 'A']), - r.compilePattern(r.newSet('W'), r.__))); +dumpM(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 'A']), + r.compilePattern(r.arrayToSet(['W']), r.__))); console.log("projections"); -dumpM(r.project(r.union(r.compilePattern(r.newSet('A'), r.__), - r.compilePattern(r.newSet('B'), ['b'])), +dumpM(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), r.__), + r.compilePattern(r.arrayToSet(['B']), ['b'])), r.compileProjection(r._$([[r.__]])))); -dumpM(r.project(r.union(r.compilePattern(r.newSet('A'), [1, 2]), - r.compilePattern(r.newSet('C'), [1, 3]), - r.compilePattern(r.newSet('B'), [3, 4])), +dumpM(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [1, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4])), r.compileProjection([r._$(), r._$()]))); -dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.newSet('A'), [1, 2]), - r.compilePattern(r.newSet('C'), [1, 3]), - r.compilePattern(r.newSet('B'), [3, 4])), +dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [1, 2]), + r.compilePattern(r.arrayToSet(['C']), [1, 3]), + r.compilePattern(r.arrayToSet(['B']), [3, 4])), r.compileProjection([r._$(), r._$()])))); -var R1 = r.compilePattern(r.newSet('A'), [r.__, "B"]); -var R2 = r.compilePattern(r.newSet('B'), ["A", r.__]); +var R1 = r.compilePattern(r.arrayToSet(['A']), [r.__, "B"]); +var R2 = r.compilePattern(r.arrayToSet(['B']), ["A", r.__]); var R12 = r.union(R1, R2); dumpM(R1); dumpM(R2);