erasePath fixes, and requal function
This commit is contained in:
parent
cdea1507c4
commit
e1eadbf664
49
route.js
49
route.js
|
@ -157,6 +157,32 @@ function Routing(exports) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function requal(a, b) {
|
||||||
|
if (a === null) {
|
||||||
|
return (b === null);
|
||||||
|
}
|
||||||
|
if (b === null) return false;
|
||||||
|
|
||||||
|
if (a instanceof $WildcardSequence) {
|
||||||
|
if (!(b instanceof $WildcardSequence)) return false;
|
||||||
|
a = a.matcher;
|
||||||
|
b = b.matcher;
|
||||||
|
}
|
||||||
|
if (b instanceof $WildcardSequence) return false;
|
||||||
|
|
||||||
|
if (a instanceof $Success) {
|
||||||
|
if (!(b instanceof $Success)) return false;
|
||||||
|
return valuesEqual(a.value, b.value);
|
||||||
|
}
|
||||||
|
if (b instanceof $Success) return false;
|
||||||
|
|
||||||
|
for (var key in a.entries) {
|
||||||
|
if (!b.has(key)) return false;
|
||||||
|
if (!requal(a.entries[key], b.entries[key])) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function is_keyOpen(k) {
|
function is_keyOpen(k) {
|
||||||
return k === SOA;
|
return k === SOA;
|
||||||
}
|
}
|
||||||
|
@ -213,6 +239,20 @@ function Routing(exports) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setEqual(s1, s2) {
|
||||||
|
for (var key in s1) {
|
||||||
|
if (s1.hasOwnProperty(key)) {
|
||||||
|
if (s1[key] !== s2[key]) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var key in s2) {
|
||||||
|
if (s2.hasOwnProperty(key)) {
|
||||||
|
if (s1[key] !== s2[key]) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
var unionSuccesses = function (v1, v2) {
|
var unionSuccesses = function (v1, v2) {
|
||||||
|
@ -239,6 +279,10 @@ function Routing(exports) {
|
||||||
return v;
|
return v;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var valuesEqual = function (a, b) {
|
||||||
|
return setEqual(a, b);
|
||||||
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
function expandWildseq(r) {
|
function expandWildseq(r) {
|
||||||
|
@ -438,14 +482,15 @@ function Routing(exports) {
|
||||||
target = r1.copy();
|
target = r1.copy();
|
||||||
for (var key in r2.entries) examineKey(key);
|
for (var key in r2.entries) examineKey(key);
|
||||||
} else {
|
} else {
|
||||||
target = rwild(w);
|
target = new $Dict();
|
||||||
|
rupdateInplace(target, __, w);
|
||||||
for (var key in r1.entries) examineKey(key);
|
for (var key in r1.entries) examineKey(key);
|
||||||
for (var key in r2.entries) examineKey(key);
|
for (var key in r2.entries) examineKey(key);
|
||||||
}
|
}
|
||||||
return target.emptyGuard();
|
return target.emptyGuard();
|
||||||
|
|
||||||
function examineKey(key) {
|
function examineKey(key) {
|
||||||
if ((key !== __) && !target.has(key)) {
|
if (key !== __) {
|
||||||
var k1 = r1.get(key);
|
var k1 = r1.get(key);
|
||||||
var k2 = r2.get(key);
|
var k2 = r2.get(key);
|
||||||
var updatedK;
|
var updatedK;
|
||||||
|
|
9
tr.js
9
tr.js
|
@ -52,3 +52,12 @@ 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('C'), [1, 3]),
|
||||||
r.compilePattern(r.newSet('B'), [3, 4])),
|
r.compilePattern(r.newSet('B'), [3, 4])),
|
||||||
r.compileProjection([r._$(), r._$()]))));
|
r.compileProjection([r._$(), r._$()]))));
|
||||||
|
|
||||||
|
var R1 = r.compilePattern(r.newSet('A'), [r.__, "B"]);
|
||||||
|
var R2 = r.compilePattern(r.newSet('B'), ["A", r.__]);
|
||||||
|
var R12 = r.union(R1, R2);
|
||||||
|
dumpM(R1);
|
||||||
|
dumpM(R2);
|
||||||
|
dumpM(R12);
|
||||||
|
dumpM(r.erasePath(R12, R1));
|
||||||
|
dumpM(r.erasePath(R12, R2));
|
||||||
|
|
Loading…
Reference in New Issue