reductio
Version:
Reductio: Crossfilter groupings
37 lines (36 loc) • 972 B
JavaScript
var exception_count = {
add: function (a, prior, path) {
var i, curr;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
// Only count++ if the p.values array doesn't contain a(v) or if it's 0.
i = path(p).bisect(path(p).values, a(v), 0, path(p).values.length);
curr = path(p).values[i];
if((!curr || curr[0] !== a(v)) || curr[1] === 0) {
path(p).exceptionCount++;
}
return p;
};
},
remove: function (a, prior, path) {
var i, curr;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
// Only count-- if the p.values array contains a(v) value of 1.
i = path(p).bisect(path(p).values, a(v), 0, path(p).values.length);
curr = path(p).values[i];
if(curr && curr[0] === a(v) && curr[1] === 1) {
path(p).exceptionCount--;
}
return p;
};
},
initial: function (prior, path) {
return function (p) {
p = prior(p);
path(p).exceptionCount = 0;
return p;
};
}
};
export default exception_count;