Sundry set API renamings and additions

This commit is contained in:
Tony Garnock-Jones 2014-05-25 13:30:17 -04:00
parent 037abe45a5
commit 83e82658c5
2 changed files with 39 additions and 24 deletions

View File

@ -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;

32
tr.js
View File

@ -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);